大浮点数很奇怪

use*_*866 3 java floating-accuracy

在java中我使用float来存储数字.我选择浮点格式,因为我使用整数和双数字,其中数字不同,可能有大整数或大的双数字,小数位数不同.但是当我将这些数字插入数据库时​​,会存储错误的数字.例如:

float value = 0f; value = 67522665; System.out.println(value);

印刷版:6.7522664E7,它作为67522664存储在数据库中,而不是67522665

Ted*_*opp 7

浮点数的分辨率有限 - 大约7位有效数字.你看到了圆整错误.您可以使用a double来获得更高分辨率,或者使用精确算术BigDecimal.

建议阅读:每个计算机科学家应该知道的浮点运算

  • 顺便说一句,`BigDecimal`计算比其他原始数据类型慢得多. (2认同)
  • @yshavit - 你是对的,"准确性"不是正确的词.但"精确度"也不对,因为这与可重复性有关.(IEEE浮点计算完全可重复.)我选择了"分辨率". (2认同)