如何计算分数中第一个有效数字的位置?
以下是一些具有所需输出的示例输入
0.123456 // 1st sign. number position = 1
0.0012345 // ... = 3
0.000012345 // ... = 5
答案 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
关于某些角落案件的说明:
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;
}
}