gpt4 book ai didi

java - 在 BigDecimal 中查找有效数字位数的好方法?

转载 作者:搜寻专家 更新时间:2023-11-01 01:26:33 25 4
gpt4 key购买 nike

我不想限制 BigDecimal 中有效数字的数量。我只想找到该数字的有效数字位数。

有没有办法不用将数字转换为字符串并计算数字字符就可以做到这一点?

最佳答案

我相信你想要 stripTrailingZeros 的组合, precisionscale ,如此处所示:

import java.math.*;

public class Test {

public static void main(String[] args) {
test("5000"); // 4
test("5000.00"); // 4
test("5000.12"); // 6
test("35000"); // 5
test("35000.00"); // 5
test("35000.12"); // 7
test("35000.120"); // 7
test("0.0034"); // 2
test("1.0034"); // 5
test("1.00340"); // 5
}


private static void test(String input) {
System.out.println(input + " => " +
significantDigits(new BigDecimal(input)));
}

private static int significantDigits(BigDecimal input) {
input = input.stripTrailingZeros();
return input.scale() < 0
? input.precision() - input.scale()
: input.precision();
}
}

调用 stripTrailingZeros 是必需的,否则 BigDecimal 完全有可能以“非规范化”形式存储。例如,new BigDecimal(5000) 的精度为 4,而不是 1。

scale() 的调用用于处理规范化形式在小数点有尾随零但没有尾随零的情况小数点。在这种情况下,比例将始终为负数,表示尾随零的数量。

编辑:带有尾随零但没有小数点的情况本质上是模棱两可的——例如,“5000”没有明确的有效数字位数。上面的代码将小数点前的所有尾随零视为有效。

关于java - 在 BigDecimal 中查找有效数字位数的好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21443740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com