Java Double对象存储到两位小数

时间:2014-08-19 14:23:16

标签: java double double-precision

是否可以将java.lang.Double存储到正好两位小数 例如:0.2变为0.20

我将代码修改为以下

            Double correlation = getSomeDoubleValue(label, key, date);
            DecimalFormat df = new DecimalFormat("0.00");
            correlation = Double.valueOf(df.format(correlation));

但是当功能getSomeDoubleValue()返回0.2时,df.format(correlation)会将其0.20设为java.lang.Double,但是当我需要Double.valueOf("0.20")时,0.2会给我{{1}} 1}}回来。

我不知道如何实现这一点,或者它是否可以实现。

5 个答案:

答案 0 :(得分:1)

浮点数(例如doublefloat)实际上是数学表达式,因此不准确。

如果你想要更精确的东西,你应该使用BigDecimal类,这是一个任意精度的十进制数。

您可以通过使用setScale函数之一设置其缩放来设置BigDecimal存储的位置数,这些函数也可用于设置在进行数学运算时使用的舍入模式它

请注意BigDecimal是一种对象类型,因此您需要使用其方法对其进行数学运算(.add.subtract.multiply,{{ 1}})。

.divide包含用于从BigDecimalBigDecimaldouble创建long的构造函数。

答案 1 :(得分:0)

值为0.2 double 存储该数字为0.20的事实。此外,它还代表数字0.200,0.2000,0.20000等。您所寻找的是一种将数字打印到两位小数精度的方法。为此,请参阅:Best way to Format a Double value to 2 Decimal places

答案 2 :(得分:0)

这是存钱吗?

如果是这样,请使用int或long并存储总分数。然后在需要时移动小数点。

所以不要存储0.20存储20,而是在打印时知道要放小数点。

答案 3 :(得分:0)

将0.2作为0.20的一种方法是将值存储在String中。例如 字符串编号= String.format(“%。2f”,相关性);

答案 4 :(得分:0)

你的问题与精确度无关。默认情况下,Java中的double具有固定的精度,远远大于2位小数。 I.E.默认情况下,该值存储的位数超过2位 您还可以查看this问题 在我看来,你正在寻找一种只代表2位小数的方法。一种方法是使用printf

例如:

System.out.printf("%.2f", 0.2);

这将打印:

0.20

希望这有帮助