Float.valueOf (String arg) проблема округления в Java - PullRequest
0 голосов
/ 14 декабря 2018

Люди, я наткнулся на одну базовую проблему в моем приложении, где я пытаюсь преобразовать строковое значение в соответствующее значение Float:

Float val = obj.getFloat("220293.43") ;
System.out.println(val);

Определение getFloat ():

Float getFloat(String arg)
{

return Float.valueOf( arg ) ;

}

Теперь проблема в том, что когда я печатаю значение преобразованного числа с плавающей точкой, оно дает мне:

220293.44  

, что явно неверно.Может ли кто-нибудь помочь мне в этом, я немного читал об этом и подозреваю, что проблема заключается в ограниченной способности float поддерживать 4 байта данных, но мне нужно подтверждение, а также объяснение, почему это может происходить. Спасибо за ваше время.

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

float имеет только 24 бита точности.

Вы должны использовать double, если вам требуется плавающее значение

0 голосов
/ 14 декабря 2018

Такое поведение обычно известно как проблемы точности с плавающей запятой.Не все действительные числа могут быть точно представлены значениями с плавающей запятой, поэтому существуют проблемы округления, подобные описанной вами.Это особенно странно, если вы сравниваете значения, которые выглядят одинаково, но не совпадают во внутреннем представлении.

Арифметика с плавающей точкой, Точность

Isесть ли необходимость использовать Float в вашем случае?

...