关于JAVA中对整数位为0的小数保留N位有效数

[size=large]最近有个需求是对一个double值,保留3位小数,如果整数位为零,则小数点后保留3个有效值。[/size]
[size=large][color=red]下面是实现代码,如果有更好的办法,请告诉我,谢谢![/color][/size]

private static final int DEFAULT_SCALE = 3;//默认保留三位
private static final int MAX_SCALE = 9;//最大保留9位
private static final String INTEGER_BIT_NOT_ZERO = "(0([.](0+|[0-9]{1,3}))?)|(-?[1-9][0-9]*([.][0-9]+)?)";//不包括整数位为0,小数位超过三位的正则
private static final String INTEGER_BIT_IS_ZERO = "0[.]0*[1-9][0-9]{0,2}";//获取需要保留小数位的精度的正则


private double formatNumber(double value)
{
BigDecimal bigDecimal = BigDecimal.valueOf(value);
int scale = DEFAULT_SCALE;
if (!bigDecimal.toString().matches(INTEGER_BIT_NOT_ZERO))
{
Matcher matcher = Pattern.compile(INTEGER_BIT_IS_ZERO).matcher(
bigDecimal.toString());
if (matcher.find())
{
scale = matcher.group().length() - 2;
}
else
{
scale = MAX_SCALE;//因为如果是科学计数的形式,这儿会匹配不成功,所以给个默认的精度
}
}
return bigDecimal.setScale(scale, RoundingMode.HALF_UP).doubleValue();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值