Как проверить, является ли строка положительным числом и, возможно, запятой в качестве десятичного разделителя и максимум двух десятичных знаков.
Пример
10.25 верно 10.2 верно 10.236 ложно Theres 3 десятичных 10.Ди ложно
или вы можете использовать это регулярное выражение
^[0-9]*([,]{1}[0-9]{0,2}){0,1}$
, если вы хотите использовать запятую и точку в качестве разрешенного разделителя, тогда
^[0-9]*([\.,]{1}[0-9]{0,2}){0,1}$
Если строка представляет отрицательное число, то перед ней должен стоять знак минуса, независимо от используемой точности, формата числа или десятичного разделителя:
if(string.equals("0.0") || !string.startsWith("-")) { //string is positive }
Чтобы проверить число, используйте:
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;
Использование возвращает 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; }
Другой вариант - использовать 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; } } }
Правильный способ получить знак числа - использовать signum, предоставленный Math lib.
signum
Math
Math.signum(yourDouble);
Возвращает функцию signumаргумент;ноль, если аргумент равен нулю, 1,0, если аргумент больше нуля, -1,0, если аргумент меньше нуля
Мое предложение: Преобразовать в двойное первое. Это будет тест для числовых. Если это не удается; преобразовать последнюю запятую в периоде (indexOf, replace). Затем преобразуйте снова.
Чтобы убедиться, что у вас максимум 2 десятичных знака - для этого есть функции в DecimalFormat ... Но для альтернатив, см. Этот вопрос здесь. Округление двойного до 5 десятичных знаков в Java ME
После преобразования двойного числа и сохранения его в 2 десятичных разрядах вы можете проверить, является ли оно отрицательным.