小数点后第一位有效数字的位置
Position of first significant digit after the decimal point
如何计算分数中第一个有效数字的位置?
以下是一些具有所需输出的示例输入
0.123456 // 1st sign. number position = 1
0.0012345 // ... = 3
0.000012345 // ... = 5
您可以遍历它,计算在它大于或等于一之前需要乘以十的次数:
public static int significantDigitNum (double d) {
int cnt = 0;
while (d < 1) {
d *= 10;
++cnt;
}
return cnt;
}
编辑:
正如 David Conrad 评论的那样,此功能仅适用于正数。也支持底片:
public static int significantDigitNum (double d) {
int cnt = 0;
d = Math.abs(d);
while (d < 1) {
d *= 10;
++cnt;
}
return cnt;
}
无需循环。您可以简单地使用以下公式:
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-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;
}
}
如何计算分数中第一个有效数字的位置?
以下是一些具有所需输出的示例输入
0.123456 // 1st sign. number position = 1
0.0012345 // ... = 3
0.000012345 // ... = 5
您可以遍历它,计算在它大于或等于一之前需要乘以十的次数:
public static int significantDigitNum (double d) {
int cnt = 0;
while (d < 1) {
d *= 10;
++cnt;
}
return cnt;
}
编辑:
正如 David Conrad 评论的那样,此功能仅适用于正数。也支持底片:
public static int significantDigitNum (double d) {
int cnt = 0;
d = Math.abs(d);
while (d < 1) {
d *= 10;
++cnt;
}
return cnt;
}
无需循环。您可以简单地使用以下公式:
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-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;
}
}