Java - 双重问题的字符串

时间:2013-03-01 16:59:50

标签: java

我正在尝试在Java中将String转换为Double。我从客户端获取跟随String,“1131.00”但是当我将它转换为Double时,我回到1131.0,这是不正确的。我期待1131.00(.00 - 有两个零)

_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;
        }

如何在十进制后保持两个零?

编辑:其中一个中间层删除小数点,将值发送到bank,bank将其除以100来计算小数。因此,如果我发送1311.0,银行费用为131.10 ......所以我必须保持两个小数点,将其保持为DOUBLE值。

8 个答案:

答案 0 :(得分: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(或任何类型的浮动二进制点数)几乎始终不合适。

如果上述内容不符合您的要求,请提供更多背景信息。

答案 1 :(得分:5)

double不区分1131.01131.00:当存储在double变量中时,它们的编号完全相同。

您可能希望将这些数字保留为Strings,或使用BigDecimal

答案 2 :(得分:2)

使用java.math.BigDecimal

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

答案 3 :(得分:1)

这是所有格式化。 double对象不包含对有多少个零的任何引用....这就是你打印它的方式。在数学中,1311.00与1311完全相同,所以它并不关心那些零。如果要保持零,则应该正确格式化。

答案 4 :(得分:0)

您希望在double数据类型中保留两个小数位是没有意义的。考虑到数值,1131.0和1131.00完全相同,因此double数据类型将值保持为1131.0。

如果您需要保存小数位,请将其保留为String。

答案 5 :(得分: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

答案 6 :(得分: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));
  }
}

答案 7 :(得分:-1)

创建格式(例如format.money(“$ 0.00”))。 Java可能有内置的处理钱的格式。如果你想要两个小数位,请使用货币格式。