2013-03-01 91 views
-2

我想將字符串轉換爲Java中的Double。我從客戶端得到以下字符串「1131.00」,但是當我將它轉換爲Double時,我返回1131.0,這是不正確的。我期待1131.00(.00 - 有兩個零)Java - 字符串加倍問題

_dPaymentAmt = ConvertUtil.stringToDouble(sPaymentAmt, 0.0); 

public static double stringToDouble(String str, double dDefaultValue) 
     throws Exception 
     { 
     double doubleValue = 0; 

     try 
      { 
      doubleValue = Double.parseDouble(str); 
      } 
     catch (Exception e) 
      { 
      doubleValue = dDefaultValue; 
      } 

     return doubleValue; 
     } 

如何在小數點後保持兩個零?

編輯:其中一箇中間層去除小數點後發送給銀行和銀行的值除以100來計算小數。因此,如果我發送1311.0,銀行收費131.10 ...所以我必須保留兩位小數點,並將其保留爲DOUBLE值。

+5

嚴,把它保存爲'String'? – 2013-03-01 17:00:31

+0

也許使用'DecimalFormat'? – squiguy 2013-03-01 17:01:29

+0

你是什麼意思'我回來'?你把它轉換回'String'嗎? – 2013-03-01 17:01:52

回答

11

double不保留不顯着的十進制數字。這只是一個數量級 - 所以1131 == 1131.0 == 1131.00。它正確將「1131.00」轉換爲1131.0。它可能不是你想要的,但它是正確的。

如果您實際上試圖存儲總是有兩位小數的值(例如貨幣),那麼您可能不應使用double開始。請使用BigDecimal或存儲整數美分(或您存儲的任何類型的數據)。

樣品展示BigDecimal工作:

import java.math.*; 

public class Test {  

    public static void main (String[] args) throws Exception { 
     BigDecimal bd = new BigDecimal("1311.00"); 
     System.out.println(bd); // 1311.00 
    } 
} 

注意,它幾乎總是不合適貨幣值存儲爲double(或任何形式的浮動二進制點數量)。

如果以上不符合您的要求,請給出更多的上下文。

+4

@Alex任意**二進制**浮點表示法與保留**小數點**之後的**小數**位數**不兼容。爲什麼你想要使用雙?也許如果我們知道我們可以想出一個解決方案。 – 2013-03-01 17:18:52

+0

@亞歷克斯:**爲什麼**你堅持把它作爲一個雙?你如何將價值發送給銀行? (我強烈懷疑你濫用界面 - 我懷疑銀行會被破壞。)正如我所說的,要麼保留它作爲BigDecimal或保留它作爲整數(值* 100)並手動格式化。 – 2013-03-01 17:19:15

+0

我明白,它是有道理的,雙只有1零,但當我想銀行界面我發送Double.toString(雙金額)在一個XML內...我想這裏我必須確保有兩個零小數點後。 – Alex 2013-03-01 18:07:12

5

double1131.01131.00之間沒有區別:當存儲在double變量中時,它們是完全相同的數字。

您可能希望保留號碼爲Strings或使用BigDecimal

0

您期望保留double數據類型中的兩位小數沒有意義。就數值而言,1131.0和1131.00是完全相同的,因此雙數據類型將保持1131.0的值。

如果您需要保存小數位,只需將其保留爲字符串即可。

1

這是所有格式。雙重對象不包含任何有關多少個零的引用....這些都是您打印它的方式。在數學中,1311.00和1311完全一樣,所以它不關心那些零。如果你想保持零,你應該正確格式化它。

2

通過使用java.math.BigDecimal

String dblStr = "1131.00"; 
BigDecimal bd = new BigDecimal(dblStr); 
System.out.println("BD is " + bd); 
0

它的那樣簡單了下面的一段代碼:

public void GetTwoDecimal(){ 

      double d = 2.34568; 
      DecimalFormat f = new DecimalFormat("##.00"); // this will helps you to always keeps in two decimal places 
      System.out.println(f.format(d)); 
    } 

Source

+0

您需要使用'0'而不是'#',從javadoc:「#Digit,零顯示爲不存在」 – 2013-03-01 17:07:31

-1

創建的格式(例如format.money( 「$ 0.00」 ))。 Java可能具有處理金錢的內置格式。如果您想要兩位小數,請使用金錢格式。

0

嘗試像這樣:我相信你的問題將得到解決。

import java.text.*; 
public class Demo 
{ 
    public static void main(String args[]) 
    { 
    String str = "131.0000"; // keep as many zeroes 
    double d1 = Double.parseDouble(str); 
    DecimalFormat df = new DecimalFormat("0.00"); 
    System.out.print(df.format(d1)); 
    } 
}