在转换为BigDecimal之前长到String

时间:2016-04-04 10:16:04

标签: java java-8 type-conversion long-integer bigdecimal

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

我会做这样的事情:

new BigDecimal(longValueToConvert)

但是我已经读过这个强制转换可能会导致转换错误,并且在将它用于BigDecimal构造函数之前,最好将Long强制转换为String。

new BigDecimal(longValueToConvert.toString())

使用第一个或第二个是否可行?我使用的是Java 8。

2 个答案:

答案 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任何浮点数都不是问题,但来自其他方向的需要小心。