Java 在转换为BigDecimal之前,长到字符串
我必须将Long(对象1,包含在变量'longValueToConvert'中)转换为BigDecimal 我会这样做:Java 在转换为BigDecimal之前,长到字符串,java,java-8,type-conversion,long-integer,bigdecimal,Java,Java 8,Type Conversion,Long Integer,Bigdecimal,我必须将Long(对象1,包含在变量'longValueToConvert'中)转换为BigDecimal 我会这样做: new BigDecimal(longValueToConvert) 但是我已经读到,这种类型转换可能会在转换过程中导致错误,在将Long转换为字符串之前,最好将其转换为bigdecim构造函数 new BigDecimal(longValueToConvert.toString()) 可以使用第一个还是第二个更好?我使用Java 8。你听错了。构造函数没有转换错误。一个
new BigDecimal(longValueToConvert)
但是我已经读到,这种类型转换可能会在转换过程中导致错误,在将Long转换为字符串之前,最好将其转换为bigdecim构造函数
new BigDecimal(longValueToConvert.toString())
可以使用第一个还是第二个更好?我使用Java 8。你听错了。构造函数没有转换错误。一个
long
可以精确地表示出来,用它来表示一个BigDecimal
是没有问题的
只有在使用构造函数时才需要小心。这是因为某些双值无法准确表示。从文件中:
此构造函数的结果可能有些不可预测。有人可能会假设在Java中编写新的BigDecimal(0.1)
会创建一个与0.1
[…]完全相同的BigDecimal(0.1)
,但实际上它等于0.1000000000000005555115123125782702118158340451015625
。这是因为0.1
不能准确地表示为double
[…]
另一方面,String
构造函数是完全可预测的:编写新的BigDecimal(“0.1”)
会创建一个与0.1
完全相等的BigDecimal,正如人们所期望的那样。因此,通常建议优先使用字符串构造函数而不是此构造函数
您可以尝试以下方法:
new BigDecimal(longValueToConvert.longValue())
这个很好用。我相信您应该关心的是,当表示浮点数时,精度很重要。e、 g.当您使用BigDecimal(double)
或BigDecimal(float)
构造函数时。你有这些场景吗?还有,这里的名字告诉你一切Long
到任何浮点数都不是问题,但是来自其他方向的数据需要小心 代码中不涉及强制转换,也不会导致任何转换错误。此外,最好使用,因为它们不总是创建新对象。虽然这会起作用,但结果将与新的BigDecimal(longValueToConvert)
“[将]long转换为任何浮点数不是问题”-实际上,将long
转换为float
或double
会导致精度损失。为什么要将long转换为long?对我来说没什么意义。