2016-12-28 1 views
2

Когда я выполнить следующий код, он имеет проблему:Почему мой поплавок 999999999 стал 10000000000?

float number = 999999999; 
printf("%lf", number); 

Результат является 10000000000 вместо 999999999.

Почему это не так? 999999999?

+0

Вам потребуется bignums библиотеку эквивалент его, и соответствующие типы. –

ответ

8

Typical float может представлять собой примерно 2 разные цифры, такие как 1234.0 и -0.125. 999999999 не является одним из них. 10000000000.0f ближайший float альтернатива.

приближение произошло во время присвоения

float number = 999999999; // Really assigned 10000000000.0f 
+0

Спасибо за ваш ответ, но я не знаю мужчин о «Типичном поплавке» может представлять собой примерно 232 разных номера, таких как 1234.0 и -0.125. 999999999 не один из них ». Можете ли вы показать мне больше об этом? – zhaoguangliang

+0

@zhaoguangliang 'float' обычно составляет 4 байта, а это, самое большее, 4 294 967 296 разных чисел с плавающей запятой. Однако вы можете ввести код 'float number = endless_different_decimal_values_in_text;'. Иногда код будет использовать число, которое не представляется равным 1 из этих 4 миллиардов. Что, по-вашему, должно произойти тогда? – chux