小数点后第一个有效数字的位置

时间:2015-03-04 20:00:42

标签: java decimal

如何计算分数中第一个有效数字的位置?

以下是一些具有所需输出的示例输入

0.123456    // 1st sign. number position = 1
0.0012345   // ...                       = 3
0.000012345 // ...                       = 5

3 个答案:

答案 0 :(得分:6)

无需循环播放。您只需使用以下公式:

Math.ceil(-Math.log10(d))

示例:

public static int firstSignificant(double d) {
    return (int) Math.ceil(-Math.log10(d));
}

// Usage
System.out.println(firstSignificant(0.123456));    // 1
System.out.println(firstSignificant(0.0012345));   // 3
System.out.println(firstSignificant(0.000012345)); // 5

关于某些角落案件的说明:

  • 0没有第一个有效数字。对于这种情况,公式计算为Integer.MAX_VALUE
  • 您尚未指定负值会发生什么,但如果您希望它们的行为类似于正值,则可以在公式中使用Math.abs(d)代替d

答案 1 :(得分:4)

你可以循环计算在你变得大于或等于1之前需要乘以10的次数:

public static int significantDigitNum (double d) {
    int cnt = 0;
    while (d < 1) {
        d *= 10;
        ++cnt;
    }
    return cnt;
}

编辑:
正如大卫康拉德评论的那样,这个功能只适用于正数。还支持否定:

public static int significantDigitNum (double d) {
    int cnt = 0;
    d = Math.abs(d);
    while (d < 1) {
        d *= 10;
        ++cnt;
    }
    return cnt;
}

答案 2 :(得分:0)

如果是1-9之间的数字,您可以检查每个字符。

    String numberString = "0.000012345";
    int position = 1;
    for(int i=0;i<numberString.length();i++){           
        if(String.valueOf(numberString.charAt(i)).matches("[1-9]")){
            position=i-1;
            break;
        }
    }