帮忙么网 > JAVA > 当前页面

BigDecimal

2025-02-11 NEW个对象

为什么不能用BigDecimal的equals方法做等值比较?

两个BigDecimal的数值进行比较的话,可以使用compareTo方法。 
以:0.1和0.10为例子,equals会比较value和精度,很显然这两个数的精度不一样,会返回false

 为什么不用Double和float表示金额。

浮点数运算时会有精度丢失的风险主要是由于计算机字长限制
浮点数咋爱底层分为整数和小数部分,小树部分为出现精度丢失

BigDecimal(int),BigDecimal(double),BigDecimal(float),BigDecimal(String)的区别?

主要是标度

BigDecimal(1.0)的标度是0,整数部分是1
BigDecimal(0.1),默认标度是55
BigDecimal(“0.1”),标度就是1

BigDecimal如何计算精度的?

在BigDecimal中一个数由:标度值和标度来表示。

比如:0.1标度就是1,标度值是1,1*10-1 =0.1.
100标度值1,标度是-2.

为什么建议使用BigDecimal(String),不建议使用BigDecimal(double)

因为会存在精度损失风险,创建出来的值并不是整好等于0.1的,而是0.1000000000000000055511151231257827021181583404541015625 

​new BigDecimal()和BigDecimal.valueOf() 的区别?

我们调用BigDecimal.valueOf(0.01),那么0.01会先被转化为字符串类型的对象,然后再调用 new BigDecimal() 方法,这样可以保证精度不会丢失,所以 BigDecimal.valueOf(0.01) 可以理解成等价于 new BigDecimal("0.01") 。

上一篇:java异常分类

下一篇:如何出现栈溢出?

相关文章

推荐文章