一起创业网-为互联网创业者服务

怎么写程序求有效数字

求有效数字的方法取决于输入数据的形式和精度要求。以下是几种不同情况下求有效数字的常见方法:

基本整数或小数

去除字符串首尾空格。

判断剩余字符是否为数字、小数点或正负号。

如果包含小数点,则分别计算整数部分和小数部分的有效数字。

如果包含正负号,则记录符号。

科学计数法表示的数字

去除字符串首尾空格。

查找字符'e'或'E',将字符串分为底数和指数部分。

分别验证底数和指数部分是否为有效数字。

底数部分可能包含正负号、数字和小数点。

指数部分必须为整数。

使用有限状态自动机(FSM)

定义状态转移表,表示不同状态下的字符处理方式。

遍历字符串中的每个字符,根据状态转移表更新状态。

根据最终状态判断字符串是否为有效数字。

使用正则表达式

定义正则表达式模式,匹配有效数字。

使用正则表达式提取匹配到的数字。

将提取到的数字转换为相应的数字类型。

```java

public class Solution {

public boolean isNumber(String s) {

s = s.trim();

boolean pointSeen = false;

boolean eSeen = false;

boolean numberSeen = false;

boolean numberAfterE = true;

for (int i = 0; i < s.length(); i++) {

char c = s.charAt(i);

if (Character.isDigit(c)) {

numberSeen = true;

} else if (c == '+' || c == '-') {

// Handle sign

} else if (c == '.') {

if (pointSeen) return false; // More than one dot

pointSeen = true;

} else if (c == 'e' || c == 'E') {

if (eSeen || !numberSeen) return false; // More than one e or e without number before it

eSeen = true;

numberAfterE = false;

numberSeen = false; // Reset number seen for the exponent part

} else {

return false; // Invalid character

}

}

return numberSeen && numberAfterE;

}

public static void main(String[] args) {

Solution solution = new Solution();

System.out.println(solution.isNumber("1234.56")); // true

System.out.println(solution.isNumber("0089")); // true

System.out.println(solution.isNumber("-123.456e789")); // true

System.out.println(solution.isNumber("abc")); // false

}

}

```

这个示例代码涵盖了基本整数、小数和科学计数法的情况,并且考虑了前导零、正负号、小数点和指数部分的有效性。你可以根据具体需求调整代码以适应不同的输入格式和精度要求。