-2

我正在尝试在 Java 中将 String 转换为 Double。我从客户端“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;
        }

如何保持小数点后的两个零?

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

4

8 回答 8

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

如果以上不符合您的要求,请提供更多上下文。

于 2013-03-01T17:02:22.537 回答
5

double1131.0和没有区别1131.00:当存储在double变量中时,它们是完全相同的数字。

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

于 2013-03-01T17:01:41.823 回答
2

通过使用java.math.BigDecimal

String dblStr = "1131.00";
BigDecimal bd = new BigDecimal(dblStr);
System.out.println("BD is " + bd);
于 2013-03-01T17:04:32.840 回答
1

这都是格式化。双对象不包含对有多少个零的任何引用......这就是您打印它的方式。在数学上,1311.00 与 1311 完全相同,因此它不关心那些零。如果你想保持零,你应该正确地格式化它。

于 2013-03-01T17:01:50.640 回答
0

您期望在数据类型中保留两位小数double是没有意义的。就数值而言,1131.0 和 1131.00 是完全一样的,因此 double 数据类型将值保持为 1131.0。

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

于 2013-03-01T17:01:48.413 回答
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)); 
    }

资源

于 2013-03-01T17:05:39.983 回答
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));
  }
}
于 2013-03-01T17:15:19.207 回答
-1

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

于 2013-03-01T17:06:49.487 回答