Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么BigDecimal.divide()给了我一个错误的答案?_Java_Rounding_Bigdecimal - Fatal编程技术网

Java 为什么BigDecimal.divide()给了我一个错误的答案?

Java 为什么BigDecimal.divide()给了我一个错误的答案?,java,rounding,bigdecimal,Java,Rounding,Bigdecimal,我目前正在为一个项目使用BigDecimal类型,它们工作得很好 除了非常大的值之外,每个除法似乎都给了我一个异常圆且不正确的答案 以下是我的代码摘录: System.out.print("a: "+a+", b: "+b); i = a.divide(b, mc).setScale(0, RoundingMode.FLOOR); System.out.println(", result: "+i); 我得到的打印件如下: a: 100000000000106, b: 1.4142135623

我目前正在为一个项目使用BigDecimal类型,它们工作得很好

除了非常大的值之外,每个除法似乎都给了我一个异常圆且不正确的答案

以下是我的代码摘录:

System.out.print("a: "+a+", b: "+b);
i = a.divide(b, mc).setScale(0, RoundingMode.FLOOR);
System.out.println(", result: "+i);
我得到的打印件如下:

a: 100000000000106, b: 1.414213562373095048801688724209699005327534773448623528143294164, result: 70000000000000
a: 100000000000022, b: 1.414213562373095048801688724209699005327534773448623528143294164, result: 70000000000000
a: 100000000000036, b: 1.414213562373095048801688724209699005327534773448623528143294164, result: 70000000000000
当我把这三个除法插入一个计算器时,它们分别给我大约70710678118704。然而,大的十进制除法给了我一个7000000000000的偶数

这跟我有关吗

注:所有类型(a、b和i)都是大小数

编辑:添加了mc的实例化:

MathContext mc = new MathContext(1, RoundingMode.DOWN);

在您的部门中,您提供了一个
MathContext
参数,该参数控制您的部门将使用多少有效数字。你的结果表明你是

  • 使用精度为1的
    MathContext
    ;或
  • 使用精度为2的
    MathContext
    ,但使用向下舍入的舍入模式
也就是说,你只能除以一到两个有效数字

您需要创建一个不同的
MathContext
对象,例如,具有更高的精度值

mc = new MathContext(10);

如果希望除法为10个有效数字。

在除法中,您提供了一个
MathContext
参数,该参数控制除法将使用多少有效数字。你的结果表明你是

  • 使用精度为1的
    MathContext
    ;或
  • 使用精度为2的
    MathContext
    ,但使用向下舍入的舍入模式
也就是说,你只能除以一到两个有效数字

您需要创建一个不同的
MathContext
对象,例如,具有更高的精度值

mc = new MathContext(10);

如果您想将分割为10位有效数字。

请显示您初始化
mc
的行。开始了。对不起,我错过了。这就是问题所在吗?请显示您初始化
mc
的行。好了。对不起,我错过了。这是怎么回事?这正是我的问题。非常感谢。只要stackoverflow允许我就接受。这正是我的问题。非常感谢。只要我同意,我就接受。