在转换为BigDecimal之前长到String

Luc*_*tti 3 java type-conversion bigdecimal java-8 long-integer

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

我会做这样的事情:

new BigDecimal(longValueToConvert)
Run Code Online (Sandbox Code Playgroud)

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

new BigDecimal(longValueToConvert.toString())
Run Code Online (Sandbox Code Playgroud)

使用第一个或第二个是否可取?我使用Java 8.

Tun*_*aki 11

你听错了 BigDecimal(long)构造函数没有转换错误.A long可以准确表示,并且没有问题BigDecimal.

只有在使用BigDecimal(double)构造函数时才需要小心.这是因为某些double值无法准确表示.从文档:

这个构造函数的结果可能有点不可预测.有人可能会认为new BigDecimal(0.1)用Java 编写会创建一个BigDecimal完全等于0.1[...]但实际上等于0.1000000000000000055511151231257827021181583404541015625.这是因为0.1无法准确表示为double[...].

String构造,在另一方面,是完全可以预测的:写作new BigDecimal("0.1")创建的BigDecimal正好等于0.1,正如人们所期望的那样.因此,通常建议优先使用String构造函数.

  • 此外,[工厂方法](https://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal.html#valueOf-long-int-)是首选,因为它们并不总是创建一个新的对象. (2认同)