如何检查字符串是数字正数,可能是逗号作为小数分隔符和最多两位小数。
实施例
10.25是真的 10.2是真的 10.236是假的theres 3十进制 10.dee是假的答案 0 :(得分:5)
或者您可以使用此正则表达式
^[0-9]*([,]{1}[0-9]{0,2}){0,1}$
如果你想要逗号和点作为允许的分隔符,那么
^[0-9]*([\.,]{1}[0-9]{0,2}){0,1}$
答案 1 :(得分:4)
如果字符串表示负数,那么无论使用的精度,数字格式或小数分隔符如何,它都必须以减号为前缀:
if(string.equals("0.0") || !string.startsWith("-")) {
//string is positive
}
答案 2 :(得分:3)
要检查数字,请使用:
Double number = Double.parseDouble(string);
return number > 0;
**更新:
对于逗号作为分隔符,您可以使用以下内容:
NumberFormat format = NumberFormat.getInstance(Locale.FRANCE);
Number number = format.parse(string);
double d = number.doubleValue();
return number > 0;
答案 3 :(得分:0)
我的建议: 首先转换为双倍。那将测试数字。 如果失败了; 转换句点中的最后一个逗号(indexOf,replace)。 然后再转换。
为了确保你最多有2个小数位 - 在DecimalFormat中有它的功能...... 但对于替代方案,请在此处查看此问题。 Rounding a double to 5 decimal places in Java ME
双重转换并存储到2位小数后,您可以检查它是否为负数。
答案 4 :(得分:0)
获取数字符号的正确方法是使用Math
lib提供的signum
。
Math.signum(yourDouble);
返回参数的signum函数;如果参数为零,则为零;如果参数大于零,则为1.0;如果参数小于零,则为-1.0
答案 5 :(得分:0)
另一种选择是使用BigDecimal:
import java.math.BigDecimal;
public class TestBigDecimal2 {
public static void main(String[] args) {
String[] values = { "10.25", "-10.25", "10.2", "10.236", "10.dee" };
for(String value : values) {
System.out.println(value + " is valid: " + checkValid(value));
}
}
private static boolean checkValid(String value) {
try {
BigDecimal decimal = new BigDecimal(value);
return decimal.signum() > 0 && decimal.scale() < 3;
}
catch (NumberFormatException e) {
return false;
}
}
}
答案 6 :(得分:0)
使用 如果是正整数则返回true,否则返回false。
public static boolean isPositiveInteger(String str) {
if (str == null) {
return false;
}
int length = str.length();
if (length == 0) {
return false;
}
if (str.charAt(0) == '-') {
return false;
}
for (int i = 0; i < length; i++) {
char c = str.charAt(i);
boolean isDigit = (c >= '0' && c <= '9');
if (!isDigit) {
return false;
}
}
return true;
}