Числовой формат знает, как числа записываются в вашем регионе.Например, в Италии у вас есть "," как десятичная точка.Итак:
NumberFormat nf = NumberFormat.getInstance(Locale.ITALY);
Number number = nf.parse("0,1");
System.err.println(number);
0.1
Хотя, если вы использовали "."который просто используется для создания групп (например, тысячи), вы получите 1 как результат (что правильно, если 01 - 1):
NumberFormat nf = NumberFormat.getInstance(Locale.ITALY);
Number number = nf.parse("0.1");
System.err.println(number);
1
Сейчасс английским языком это полная противоположность:
NumberFormat nf = NumberFormat.getInstance(Locale.ENGLISH);
Number number = nf.parse("0.1");
System.err.println(number);
0.1
И, наконец, английский с ",":
NumberFormat nf = NumberFormat.getInstance(Locale.ENGLISH);
Number number = nf.parse("0,1");
System.err.println(number);
1
Кто-то спорил о следах 0.Итак:
NumberFormat nf = NumberFormat.getInstance(Locale.ENGLISH);
double d = nf.parse("17").doubleValue();
double d2 = nf.parse("17.000").doubleValue();
И d, и d2 будут иметь одинаковое значение.Это точно такое же поведение, как если бы я назначил переменные в коде.
double d = 17;
double d2 = 17.000;
Обе переменные будут содержать одинаковое число.В обоих случаях без потери точности.
Сравнение также правильно вернет true:
boolean test = nf.parse("17") == nf.parse("17.000");
System.err.print( test );
true
То же поведение, что ив коде:
boolean test = 17 == 17.000;
System.err.print( test );
true
Наконец, возвращаемый тип NumberFormat - это «Number».Он анализирует число как то, что есть: число.Так что это не Дабл или Лонг (как Животное не является Собакой или Кошкой, даже если Собака является Животным).
Если вам нужен надежный тип double, вы просто используете number.doubleValue (), который дает вам надежный тип.