首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得BigDecimal的第一个非零位数

问如何获得BigDecimal的第一个非零位数
EN

Stack Overflow用户
提问于 2015-09-29 15:23:14
回答 2查看 2.1K关注 0票数 5

在java中,如何获得BigDecimal的第一个非零数字?

例如:

代码语言:javascript
复制
0.001 => 1
0.02 => 2
987.654 => 9

对于0到1之间的数字,这将起作用:

代码语言:javascript
复制
bigDecimal.scaleByPowerOfTen(bigDecimal.precision()).setScale(0, RoundingMode.DOWN)

对于大于1的数字,这将起作用:

代码语言:javascript
复制
bigDecimal.scaleByPowerOfTen(1-bigDecimal.precision()).setScale(0, RoundingMode.DOWN)

但是有没有一个解决方案,对任何数字都有效?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-29 15:54:32

这里有一个只使用BigDecimal和int的解决方案

代码语言:javascript
复制
BigDecimal value = new BigDecimal(0.021); //input your value here

int scale = value.scale();
int precision = value.precision();
int result = value.movePointLeft(precision-scale-1).abs().intValue(); //this will generate the result you need
票数 4
EN

Stack Overflow用户

发布于 2015-09-29 15:35:07

可以将BigDecimal转换为char[],并使用循环检查数字。请看下面的示例。

代码语言:javascript
复制
    BigDecimal bigDecimal = new BigDecimal(5220.33);

    char[] chars = String.valueOf(bigDecimal).toCharArray();
    for (char c : chars) {
        if (Character.isDigit(c) ? Character.getNumericValue(c) != 0 : false) {
            System.out.println("First number is : " + c);
            return;
        }
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32847896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档