2013-06-24 53 views
0

我有String值;並且我需要始終以2位小數作爲Double類型;所以,如果我得到500,我需要將其轉換爲500.00始終是雙倍值。獲得雙倍的.00

我的問題是,當我有一些像xxx.00xxx.x0,該parseDouble方法去除第二0

我的代碼是這樣

String number = "500.00"; 
Double numberToSave = (Double.ParseDouble(number)); 

而且numberToSave回報500.0

任何我如何解決這個問題的想法?我需要顯示第二個小數,即使它是0

謝謝。

+6

您將**的格式**與其實際值混淆。 –

+2

500,500.0和500.00都是相同的數字。問題不在於'Double.ParseDouble'。在向用戶顯示值時如何正確格式化數字,而不是存儲它,您應該擔心。 –

+0

看到這個lik:http://stackoverflow.com/questions/17236335/problems-with-decimalformat/17236468#17236468 – Masudul

回答

5

Double沒有任何維護無用數字的概念。

的問題是不是你正在使用的Double(或double)值 - 這是你怎麼那麼將其轉換回爲一個字符串。您應該使用指定適當的小數位數的DecimalFormat

另外請注意,您目前使用Double.parseDouble它返回一個double,但你將其分配給一個變量Double,這將框中的值 - 可能不必要。

示例代碼:

import java.text.DecimalFormat; 

public class Test { 
    public static void main(String[] args) { 
     String text = "500.00"; 
     double number = Double.parseDouble(text); 

     DecimalFormat format = new DecimalFormat("0.00"); 
     String formatted = format.format(number); 
     System.out.println(formatted); 
    } 
} 

注意上面的代碼將會給你,即使有更多的位數兩位十進制數。

此外,如果確切的十進制數字對您很重要,您可能需要考慮使用BigDecimal而不是double。如果您的值實際上代表貨幣,這一點尤其重要。您應該瞭解浮點型二進制點類型(如double)和浮點型十進制點類型(如BigDecimal)之間的差異,並在它們之間進行適當選擇。

+0

對不起喬恩。那是一個錯誤。我在你的答案中加入了java文檔鏈接並將其刪除。 – JHS

+0

謝謝你,這很有用,你絕對是對的,問題不在Double本身,這是我使用的邏輯。 所以我修改了添加一個String var的代碼來獲取數字和格式,所以我可以根據需要顯示它。 –

1

您需要使用DecimalFormat類。

類似這樣的DecimalFormat df = new DecimalFormat("#.##");

看看java docs

+0

其中「類似」的意思是「實際上不是#。##作爲模式」? (這隻會給樣本值500。) –

+0

是的。我想我會讓提問者想一點。 ;) – JHS

+0

但是,這和寫一些根本不會做問題所要求的東西有區別。 – arshajii

1

你可能要考慮的DecimalFormat類,它可以用來格式化雙打是這樣的:

import java.text.*; 

public class FormatDoubleTest 
{ 
    public static void main(String[] args) 
    { 
     double d1 = 500.00; 
     double d2 = 500.001; 
     double d3 = 500.009; 

     DecimalFormat df = new DecimalFormat("0.00"); 

     System.out.println(df.format(d1)); 
     System.out.println(df.format(d2)); 
     System.out.println(df.format(d3)); 

    } 
} 
+1

「#。##」不是我們想要的 - 這會給原始樣本值「500」。 –

+0

@JonSkeet:是的,我的壞。用可運行示例更新。 – FrustratedWithFormsDesigner

2

總是有String.format爲好,

String.format("%.2f", d) 

如果你只擔心打印格式化的值,您可以使用System.out.printf,

double d = 500; 
System.out.printf("%.2f%n", d); // %n is a line-break 
 
500.00 
0

使用NumberFormat對象。

String number = "500.00"; 
Double numberToSave = (Double.ParseDouble(number)); 
NumberFormat nf = NumberFormat.getInstance(); 
nf.setMinimumFractionDigits(3); 
System.out.println(nf.format(numberToSave));