Если я использую float, он получает 675, а если я использую double, я получаю 674 ... разве это не странно?
Не особенно.Вы форматируете разные значения.В частности, если вы действительно измените свой код, чтобы он компилировался (с суффиксом f
для числа с плавающей точкой), даже если вы указали 9 цифр, float
будет только достоверно представлять 7.
Ни одно из чисел не является точно 12345.6745.На самом деле, точные значения:
f = 12345.6748046875
d = 12345.674499999999170540831983089447021484375
Посмотрите на них, и очевидно, что третье десятичное место равно 5 для f
и 4 для d
.
Если вы хотитечтобы сохранить десятичные цифры, вы должны рассмотреть возможность использования BigDecimal
.