是否可以将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}}回来。
我不知道如何实现这一点,或者它是否可以实现。
答案 0 :(得分:1)
浮点数(例如double
和float
)实际上是数学表达式,因此不准确。
如果你想要更精确的东西,你应该使用BigDecimal
类,这是一个任意精度的十进制数。
您可以通过使用setScale
函数之一设置其缩放来设置BigDecimal
存储的位置数,这些函数也可用于设置在进行数学运算时使用的舍入模式它
请注意BigDecimal
是一种对象类型,因此您需要使用其方法对其进行数学运算(.add
,.subtract
,.multiply
,{{ 1}})。
.divide
包含用于从BigDecimal
,BigDecimal
或double
创建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
希望这有帮助