decimal java 位数_java – 找到BigDecimal中有效位数的简洁方法?

我相信你想要一个

stripTrailingZeros,

precision和

scale的组合,如下所示:

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完全有可能以“非规范化”形式存储.例如,新的BigDecimal(5000)的精度为4,而不是1.

对scale()的调用用于处理规范化形式在小数点之前具有尾随零但在小数点之后没有任何内容的情况.在这种情况下,比例将始终为负,并指示尾随零的数量.

编辑:尾随零但没有小数点的情况本质上是模糊的 – 例如,没有确定数量的有效数字“5000”.上面的代码将小数点前的所有尾随零视为重要.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值