NO , приведение к плавающей точке почти всегда деструктивно.
В вашем примере, 5.111 в двоичном виде:
101.00011100011010100111111011111001110110110010001011010000111001...
Число с плавающей запятой будет хранить 23 цифры:
101.0001110001101010011
(5.1109981536865234375)
Двойник будет хранить 52 цифры:
101.0001110001101010011111101111100111011011001000101
(5.1109999999999988773424774990417063236236572265625)
В этом случае разницы не будет.Однако в больших количествах это может повлиять на то, что вы отображаете.
Например:
1025.4995
double:
10000000001.011111111101111100111011011001000101101
(1025.499499999999898136593401432037353515625)
float:
10000000001.011111111101
(1025.499267578125)
Вы можете видеть, что точность начинает резко падать примерно после 8 цифр.
Двойное число округляется до 1025.4995 , тогда как значение с плавающей точкой будет 1025.4993