Как проверить, является ли строка числовой положительной - PullRequest
1 голос
/ 06 января 2012

Как проверить, является ли строка положительным числом и, возможно, запятой в качестве десятичного разделителя и максимум двух десятичных знаков.

Пример

10.25 верно 10.2 верно 10.236 ложно Theres 3 десятичных 10.Ди ложно

Ответы [ 7 ]

5 голосов
/ 06 января 2012

или вы можете использовать это регулярное выражение

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

, если вы хотите использовать запятую и точку в качестве разрешенного разделителя, тогда

^[0-9]*([\.,]{1}[0-9]{0,2}){0,1}$
4 голосов
/ 06 января 2012

Если строка представляет отрицательное число, то перед ней должен стоять знак минуса, независимо от используемой точности, формата числа или десятичного разделителя:

if(string.equals("0.0") || !string.startsWith("-"))  {
    //string is positive
}
3 голосов
/ 06 января 2012

Чтобы проверить число, используйте:

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;
0 голосов
/ 04 февраля 2014

Использование возвращает 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;
}
0 голосов
/ 06 января 2012

Другой вариант - использовать 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;
        }
    }
}
0 голосов
/ 06 января 2012

Правильный способ получить знак числа - использовать signum, предоставленный Math lib.

Math.signum(yourDouble);

Возвращает функцию signumаргумент;ноль, если аргумент равен нулю, 1,0, если аргумент больше нуля, -1,0, если аргумент меньше нуля

0 голосов
/ 06 января 2012

Мое предложение: Преобразовать в двойное первое. Это будет тест для числовых. Если это не удается; преобразовать последнюю запятую в периоде (indexOf, replace). Затем преобразуйте снова.

Чтобы убедиться, что у вас максимум 2 десятичных знака - для этого есть функции в DecimalFormat ... Но для альтернатив, см. Этот вопрос здесь. Округление двойного до 5 десятичных знаков в Java ME

После преобразования двойного числа и сохранения его в 2 десятичных разрядах вы можете проверить, является ли оно отрицательным.

...