2015-05-26 3 views
0

Проблема проста:String to Float не работает в java?

float f1 = Float.parseFloat("41.975779") 
//Value for f1 is 41.97578 -> An error of 1ppm 

И еще хуже !!

float f2 = Float.parseFloat("41.975645") 
//Value for f2 is 41.975643 -> An error of 2ppm 

Это не имеет значения, если я использую Float.parseFloat или Float.valueOf, они оба дают одинаковый результат.

Примечание: Эта проблема возникает при программировании в android, я не пробовал ее в pure-java, но я предполагаю, что это будет тот же результат.

+3

Используйте класс BigDecimal для произвольной точности подписанных поплавков. Есть способы конвертировать String в него, искать другие подобные сообщения для этого. – Kon

+0

Согласно предложению @ Kon, используйте BigDecimal. Не все * фракции могут быть точно представлены в двоичном формате, следовательно, ошибка. Дополнительную информацию см. Связанный вопрос. – npinti

ответ

3

Ваша строка плавать преобразования работают точно как рекламируется, хотя, очевидно, не так, как вы ожидаете :-)

IEEE754 одинарной точности с плавающей запятой (как и в float) имеют только точность около семи десятичные цифры.

Если вы хотите получить больше точности, используйте double, который содержит около пятнадцати десятичных цифр или переключится на BigDecimal для произвольной точности.

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