Java 使用BigDecimal以特定精度返回零

Java 使用BigDecimal以特定精度返回零,java,math,bigdecimal,Java,Math,Bigdecimal,我使用以下代码: //... else if(number.equals(ZERO)) return BigDecimal.ZERO.setScale(precision); 该函数通过以下方式调用: BigDecimal num = new BigDecimal(0); System.out.println(Newton.sqrt(num, 5)); 并且总是返回0E-100(无论提供的精度如何),但我需要0.00000等。 谢谢如果您的第一段代码是Newton.sqrt方法的一部

我使用以下代码:

//...
else if(number.equals(ZERO))
    return BigDecimal.ZERO.setScale(precision);
该函数通过以下方式调用:

BigDecimal num = new BigDecimal(0);
System.out.println(Newton.sqrt(num, 5));
并且总是返回0E-100(无论提供的精度如何),但我需要0.00000等。
谢谢

如果您的第一段代码是
Newton.sqrt
方法的一部分,那么我认为这个返回是理所当然的,不会执行。您可以查看
BigDecimal.equals
的文档

这样做的效果是:

else if(number.signum() == 0)
    return BigDecimal.ZERO.setScale(precision);

当然,只有当该方法没有在该方法之前的其他方法中返回
return
,并且
number
确实是正好是零(忽略此处的刻度)时,该方法才会起作用。由于牛顿暗示了一种近似算法,所以情况很可能并非如此。如果这个假设是正确的,那么您必须重新考虑您的需求

请注意,
BigDecimal.ZERO
存在,您不需要为此定义自己的常量。谢谢,我更改了它,但不幸的是它并没有解决问题。另外,请注意,
BigDecimal.equals(Object)
仅当两个实例的值和精度相同时才会返回
true
。尝试
BigDecimal。改为与(BigDecimal)==0进行比较。虽然,我不确定你的代码的目的是什么。我想返回“0.0000000……”,精度由用户选择。问题不是“如果”部分失败,我已经验证代码块是否执行。问题是,例如,如果我选择精度=20,“0E-100”是返回值。如果执行
System.out.println(BigDecimal.ZEROsetScale(5)),我希望System.out.print(BigDecimal.ZEROsetScale(5))打印“0.00000”,而不是“0E-100”@jgpt0.00000
。因此,我认为我是对的,除非你能提供一个例子证明不是这样的。System.out.println(BigDecimal.ZERO.setScale(50));为我返回“0E-50”。“0E-”表示似乎从精度=7开始。然后发生了两件事:首先:您的示例谈到“5”和“0E-100”-两个数字不匹配。第二,“0E-5”是与“0.0000”相同的数字,只是该数字的表示形式已更改(由
println
选择)。如果您想要另一种表示法,请查看
java.text.DecimalFormat
以获得您自己的格式。但这与你的问题完全无关。好的,谢谢。“5”只是另一个例子。这意味着如果有人要使用me类,他就必须使用java.text.DecimalFormat,而当函数返回BigDecimal时,处理这个问题不是我的责任?