Преобразование строки с точкой или запятой в числовое число
Мне всегда нравится ввод в мою функцию, чтобы получить числа, которые варьируются от 0,1 до 999,9 (десятичная часть всегда разделяется символом "." , если нет десятичной, тогда нет "." , например, 9 или 7.
Как преобразовать эту String в значение float независимо от локализации (некоторые страны используют "," для разделения десятичной части числа. Я всегда получаю ее с помощью "." )? Это зависит от настроек локального компьютера?
Ответы
Ответ 1
Метод Float.parseFloat()
не зависит от языка. Он ожидает точку в виде десятичного разделителя. Если десятичный разделитель на вашем входе всегда является точкой, вы можете использовать это безопасно.
Класс NumberFormat
предоставляет языковой анализ и формат, если вам нужно адаптироваться для разных локалей.
Ответ 2
DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setDecimalSeparator('.');
DecimalFormat format = new DecimalFormat("0.#");
format.setDecimalFormatSymbols(symbols);
float f = format.parse(str).floatValue();
Ответ 3
valueStr = valueStr.replace(',', '.');
return new Float(valueStr);
Готово
Ответ 4
См. java.text.NumberFormat
и DecimalFormat
:
NumberFormat nf = new DecimalFormat ("990.0");
double d = nf.parse (text);
Ответ 5
Как насчет этого:
Float floatFromStringOrZero(String s){
Float val = Float.valueOf(0);
try{
val = Float.valueOf(s);
} catch(NumberFormatException ex){
DecimalFormat df = new DecimalFormat();
Number n = null;
try{
n = df.parse(s);
} catch(ParseException ex2){
}
if(n != null)
val = n.floatValue();
}
return val;
}