提问人:generic_name_ryan 提问时间:6/22/2020 更新时间:6/22/2020 访问量:35
创建 BigDecimal 时,precision 和 setScale 之间有什么关联?
What is the correlation between precision and setScale when creating a BigDecimal?
问:
我了解到精度是值中的总位数,小数位数是小数点后的位数。 因此,据我了解,数字 1234.56 的精度 = 6 和小数位数 = 2。
我还看到,当您使用 MathContext 定义精度,然后创建一个精度大于定义的 BigDecimal 时,输出会被转换,例如
MathContext mc = new Mathcontext (6)
BigDecimal bd = new BigDecimal ("1234567", mc)
System.out.println(bd);
//bd is printed as 1.23457E+6
但是,当我在创建 BigDecimal 时添加 setScale 时,无论 MathContext 中定义的精度如何,BigDecimal 都会正确打印,例如
MathContext mc = new Mathcontext (6)
BigDecimal bd = new BigDecimal ("1234567", mc).setScale(1)
System.out.println(bd);
//bd is printed as 12345670.0
为什么它将 BigDecimal 显示为 12345670.0,精度 = 9?还值得担心吗?我可以想象它可能只是一些意想不到的效果,背后没有任何规则/逻辑,但我很好奇我可能错过了什么。
答: 暂无答案
评论
1234570.0
new BigDecimal ("1234567", mc)
创建一个具有 6 位有效数字的数字(可以显示为 1.23457E+07 或 1234570)。这是一个精度 = 6 且小数位数 = -1 的 BigDecimal。这种负小数位数意味着小数点右侧的第一个数字等于 0。然后,当您将此 BigDecimal 的小数位数从 -1 更改为 1 时,它认为此 BigDecimal 现在表示小数点右侧具有有效数字的值。而且,显然这个数字是空的,那么值变为 1234570.0