Java双对象存储到小数点后两位
是否可以将java.lang.Double存储到小数点后两位 例: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)); 但是当
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
所使用的语义。我记得你说过,“浮点数是不精确的。”那些说浮点数运算产生不精确结果的人往往对实际情况理解不足。但回顾你的回答,我发现你根本不是这么说的。我的错误。很抱歉