Java双对象存储到小数点后两位

Java双对象存储到小数点后两位,java,double,double-precision,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)); 但是当

是否可以将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


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

一个值为0.2的
双精度
正在存储数字为0.20的事实。此外,它还表示数字0.200、0.2000、0.20000等。听起来您正在寻找一种将数字打印到小数点后两位的方法。要执行此操作,请参见:

这是用来存钱的吗

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


因此,与其存储
0.20
,不如存储
20
,并且在打印时要知道小数点。

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

你的问题不在于精度。默认情况下,Java中的
double
s有一个固定的精度,远远大于小数点后2位。也就是说,默认情况下,该值的小数位数超过2位。
您还可以查看问题
在我看来,您正在寻找一种仅表示2位十进制数字的方法。一种方法是使用
printf

例如:

System.out.printf("%.2f", 0.2);
这将打印:

0.20


希望这有助于浮点数,例如
double
float
都是真正的数学表达式,因此不精确

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

您可以通过使用其函数之一设置其比例来设置
BigDecimal
存储的位数,该函数还可用于设置对其进行数学运算时使用的舍入模式

请注意,
BigDecimal
是一种对象类型,因此需要使用它的方法对其进行数学运算(
.add
.subtract
.multiply
.divide


BigDecimal
具有用于从
double
long
int
创建
BigDecimal
的构造函数,谢谢。。。但四舍五入不是我想要的。。。正如标题所建议的那样,不确定为什么这个值为-1,您不能更改double的内部表示形式。每个双精度存储为
m*2^e
(简化)
0.2
0.20
0.200
2E-1
.2
都是相同的双精度表示,但不同的
字符串
表示。通常情况下,您只需使用双倍数字进行计算,并且在打印时仅进行四舍五入。谢谢,我也有类似的意见,希望得到确认,因此我不确定,如果您只想将此双倍数字四舍五入到小数点后2位,并且只想将其用作进一步计算的双倍数字,而不想打印它,那么0.20或0.2在数学上是一样的又有什么关系呢?因为在打印时,您可以使用System.out.printf()或String.format()。谢谢,但我不想要String,已经使用DecimalFormat的浮点数字并不精确。每一个浮点数都是真实的。只要精确的结果没有浮点表示,浮点运算就会产生不精确的结果。不要忘记,当您编写
0.2
时,这是一个浮点操作,因为“0.2”不是一个浮点,编译器必须解析它是一个字符串,并将其转换为一个浮点数。@james从可用性的角度来看,大浮点数是不精确的。。。人们通常在键入0.2或执行应该在0.2左右的操作时不需要0.199999997。浮点舍入问题非常重要。大多数编程语言都包含某种十进制库,这是有原因的,即使它使用了不同的语义,如Java的
BigDecimal
所使用的语义。我记得你说过,“浮点数是不精确的。”那些说浮点数运算产生不精确结果的人往往对实际情况理解不足。但回顾你的回答,我发现你根本不是这么说的。我的错误。很抱歉