我有以下两个 BigDecimal 对象。
BigDecimal one = new BigDecimal(3.0);
BigDecimal two = new BigDecimal(3.00);
System.out.println(one.scale());//0
System.out.println(two.scale());//0
System.out.println(one.equals(two));//true
Run Code Online (Sandbox Code Playgroud)
我读过 JavaDocs,但在任何地方都无法理解equals和compareTo方法之间的区别。JavaDoc 说这些对象在equals方法上不相等,结果必须是false,但结果是true。我糊涂了。
您需要使用String构造函数来获得正确的比例,因为这BigDecimal(double)将获得可能的小比例
将 double 转换为 BigDecimal,它是 double 的二进制浮点值的精确十进制表示。返回的 BigDecimal 的小数位数是最小值,使得 (10scale × val) 是一个整数。
关于文档的更精确:
将此 BigDecimal 与指定的 Object 进行比较是否相等。与 compareTo 不同,此方法仅在两个 BigDecimal 对象的值和标度e相等时才认为它们相等(因此,通过此方法进行比较时,2.0 不等于 2.00)。
将此 BigDecimal 与指定的 BigDecimal 进行比较。值相等但具有不同比例(如 2.0 和 2.00)的两个 BigDecimal 对象被此方法视为相等。对于六个布尔比较运算符(<、==、>、>=、!=、<=)中的每一个,此方法优先于单独的方法提供。执行这些比较的建议习惯用法是:(x.compareTo(y) 0),其中是六个比较运算符之一。
您会发现equals使用比例尺进行比较,给出了一些“奇怪”的结果。
BigDecimal bd1 = new BigDecimal("2"); //scale 0
BigDecimal bd2 = new BigDecimal("2.00"); //scale 2
bd1.equals(bd2); //false
bd1.compareTo(bd2); //0 => which means equivalent
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10697 次 |
| 最近记录: |