NEW个对象 > 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异常分类

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

相关文章

  • 死锁详细介绍

    死锁是指两个或多个线程互相等待对方占用的资源,而永远无法继续执行下去的情形。

    NEW个对象 2025-01-10

  • cglib与jdk代理的区别

    JDK 动态代理: 只支持接口代理。它通过反射机制生成一个实现了指定接口的代理类。 代理对象只能调用接口中定义的方法。 CGLib 动态代理: 通过继承方式生成代理类。它可以代理没有实现接口的类。 代理对象可以调用类中的所有方法(除了final方法)。

    NEW个对象 2025-01-18

  • CMS与G1的区别?

    1、CMS是老年代回收器,可以配合其它Serial和ParNew收集器一起使用。 2、G1是全局范围的,不需要配合其它垃圾器使用

    NEW个对象 2025-01-09

推荐文章