我必须将Long(对象一,包含在变量' longValueToConvert'中)转换为BigDecimal。
我会做这样的事情:
new BigDecimal(longValueToConvert)
但是我已经读过这个强制转换可能会导致转换错误,并且在将它用于BigDecimal构造函数之前,最好将Long强制转换为String。
new BigDecimal(longValueToConvert.toString())
使用第一个或第二个是否可行?我使用的是Java 8。
答案 0 :(得分:11)
BigDecimal(long)
构造函数没有转换错误。可以准确表示long
,并且可以使BigDecimal
无效。
只有在使用BigDecimal(double)
构造函数时才需要小心。这是因为某些double
值无法准确表示。来自文档:
这个构造函数的结果可能有些不可预测。有人可能会认为在Java中编写
new BigDecimal(0.1)
会创建一个与BigDecimal
[...]完全相等的0.1
,但它实际上等于0.1000000000000000055511151231257827021181583404541015625
。这是因为0.1
无法完全表示为double
[...]。另一方面,
String
构造函数是完全可预测的:编写new BigDecimal("0.1")
创建一个BigDecimal,它正如人们所期望的那样完全等于0.1
。因此,通常建议优先使用String构造函数。
答案 1 :(得分:1)
你可以试试这个:
new BigDecimal(longValueToConvert.longValue())
这很好用。我相信你应该关注浮点数,因为精度很重要。例如当您使用BigDecimal (double)
或BigDecimal(float)
构造函数时。你有这些场景吗?此外,这里的名字告诉你一切。 Long
任何浮点数都不是问题,但来自其他方向的需要小心。