BigDecimal movePointRight和scaleByPowerOfTen有什么区别?
使用以下代码:
BigDecimal x = new BigDecimal("34.5678"); BigDecimal a = x.movePointRight(3); BigDecimal b = x.scaleByPowerOfTen(3); BigDecimal c = x.movePointRight(-3); BigDecimal d = x.scaleByPowerOfTen(-3);
a和b均为34567.8,c和d均为0.0345678。 a.scale()
和b.scale
都是1, c.scale()
和d.scale()
都是7。
这两种方法在什么情况下产生不同的结果?
-
movePointRight
将防止出现负面比例,如果它导致一个。 -
scaleByPowerOfTen
不会阻止这种情况。
示例代码:
import java.math.BigDecimal; public class BigDecimalScale { public static void main(String... args) { long base = 12345; int scale = 4; BigDecimal number = BigDecimal.valueOf(base, scale); System.out.println(number); BigDecimal pointRight = number.movePointRight(5); System.out.println(pointRight + "; my scale is " + pointRight.scale()); BigDecimal scaleBy = number.scaleByPowerOfTen(5); System.out.println(scaleBy + "; my scale is " + scaleBy.scale()); } }
结果:
1.2345 123450; my scale is 0 1.2345E+5; my scale is -1
我找到了答案。 如果x被声明为
BigDecimal x = new BigDecimal("34.5678", new MathContext(4));
然后a的标度为0,但b的标度为-1。 a.toString()
给出34570, b.toString()
给出3.457E + 4