【问题标题】:How to check a string is numeric positive如何检查字符串是否为正数
【发布时间】:2012-01-06 11:00:11
【问题描述】:

如何检查字符串是否为正数,并可能以逗号作为小数分隔符,最多保留两位小数。

例子

10.25 为真 10.2 是真的 10.236 是假的,有 3 个小数 10.dee是假的

【问题讨论】:

  • 您能否发布您认为有效和无效的示例?
  • 提示:您可能正在寻找正则表达式
  • 数字可以有多大?

标签: java parsing floating-point


【解决方案1】:

或者你可以使用这个正则表达式

^[0-9]*([,]{1}[0-9]{0,2}){0,1}$

如果您希望逗号和点都作为允许的分隔符,那么

^[0-9]*([\.,]{1}[0-9]{0,2}){0,1}$

【讨论】:

    【解决方案2】:

    如果字符串表示负数,则必须以减号为前缀,无论使用的精度、数字格式或小数分隔符如何:

    if(string.equals("0.0") || !string.startsWith("-"))  {
        //string is positive
    }
    

    【讨论】:

    • 0.0 不是正数,也没有“-”
    • 应该是!string.equals("0.0")
    【解决方案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;
    

    【讨论】:

    • boolean positive = Double.parseDouble(string) > 0
    • 如果字符串的格式与当前Locale的数字格式不匹配怎么办?
    • @nineside 它与语言环境无关
    • @Adel Boutros:!? OP 在他的回答中写道 10.236 应该返回 false 因为这个数字只能有 “最多两位小数” [原文如此]...
    • @nineside 不,Double.parseDouble 没有使用它。它总是一个小数点,不允许千位分隔符等。固定格式,检查文档。
    【解决方案4】:

    我的建议: 首先转换为双精度。这将测试数字。 如果失败; 转换句点中的最后一个逗号(indexOf,replace)。 然后再次转换。

    为了确保您最多有 2 个小数位 - DecimalFormat 中有相应的功能... 但对于替代方案,请参阅此问题here。 Rounding a double to 5 decimal places in Java ME

    将double转换并存储到小数点后2位后,您可以检查它是否为负数。

    【讨论】:

      【解决方案5】:

      获取数字符号的正确方法是使用Math lib提供的signum

      Math.signum(yourDouble);
      

      返回参数的符号函数;如果参数为零,则为零,如果参数大于零,则为 1.0,如果参数小于零,则为 -1.0

      【讨论】:

      • Math.signum 不接受String 吗?
      • 是的,我想知道为什么每个人都建议string.foo(),直到我重新阅读了这个问题-.-
      【解决方案6】:

      另一种选择是使用 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;
              }
          }
      }
      

      【讨论】:

        【解决方案7】:

        使用 如果是正整数则返回 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;
        }
        

        【讨论】:

          猜你喜欢
          • 2012-04-27
          • 1970-01-01
          • 1970-01-01
          • 2017-11-28
          • 2011-11-27
          • 2012-12-21
          相关资源
          最近更新 更多