Вы можете использовать регулярное выражение для усечения String
до не более 4 цифр после десятичной точки, затем используйте Double.valueOf
.
String[] tests = {
"12",
"12.",
"12.3",
"12.34",
"12.345",
"12.3456",
"12.34567",
"-123.45678",
"1.23456.789.0",
};
for (String test : tests) {
String truncated = test.replaceAll("(\\.\\d{4}).*", "$1");
System.out.printf("%15s %15s %15s%n",
test, truncated, Double.valueOf(truncated)
);
}
Это печатает:
12 12 12.0
12. 12. 12.0
12.3 12.3 12.3
12.34 12.34 12.34
12.345 12.345 12.345
12.3456 12.3456 12.3456
12.34567 12.3456 12.3456
-123.45678 -123.4567 -123.4567
1.23456.789.0 1.2345 1.2345
Как работает регулярное выражение
Захватывает буквальный .
, за которым следуют до четырех цифр \d{4}
в \1
. Он также соответствует всем остальным, что может следовать за .*
, и заменяет все это на $1
(обратная ссылка на то, что \1
захвачено).
Преимущество этого, скажем, простого, например, indexOf
подхода в том, что он работает, даже когда нет 4 цифр или даже когда вообще нет десятичной точки, не требуя специальной обработки. 1020 *
Смотри также