Странный результат, когда отнимают 2 фигуры одинарной точности друг от друга в VBA

Может кто-нибудь объяснить мне, почему результат ниже не равен нулю?

? CSng("0.199881939681229")
? CSng(0.1998819)
? CSng(CSng(0.199881939681229) - CSng(0.1998819))

1-я строка возвращает 0,1998819 2-я строка также возвращает 0,1998819, а 3-я возвращает 4.470348E-08

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

1 ответ

Решение

Кажется, что другой ответ для этого был удален, поэтому я отвечу сам.

VBA возвращает 0.1998819, но фактически не хранит оба числа в одном и том же двоичном файле.

см. http://www.binaryconvert.com/result_float.html?decimal=048046049057057056056049057051057054056049050050057 и http://www.binaryconvert.com/result_float.html?decimal=048046049057057056056049057

Почти идентичны, но нет.

тайна разгадана, VBA представление поплавков в ближайшем окне было проблемой.

Другие вопросы по тегам