java - BigDecimal movePointRight 和 scaleByPowerOfTen 有什么区别?

标签 java math bigdecimal

使用以下代码:

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

关于java - BigDecimal movePointRight 和 scaleByPowerOfTen 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25454734/

相关文章:

math - 你能解释一下 Reed Solomon 编码部分的单位矩阵吗?

java - 无法使用 Java 连接到我的 Gmail 收件箱

java - 将 POST 数据从 Android 应用程序发送到 PHP MySQL

c# - Math.sin - 清除想法

java - Clojure 在简单循环与 Java 上的性能真的很差

Java bigdecimal 或 double

java - 数字与分数相乘

java - 为什么不可变类提供修改器?

java - 具有标准的独特功能

java - 如何使用 for 循环创建新按钮对象并使用 javafx 显示它