Java 在转换为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。你听错了。构造函数没有转换错误。一个

我必须将Long(对象1,包含在变量'longValueToConvert'中)转换为BigDecimal

我会这样做:

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?对我来说没什么意义。