2013-07-20 4 views
-1

Я не понимаю, почему значения в следующем коде не равны 1:Integer равен 0 вместо 1

var a:uint = (4.1-1.7)/2.4; 
trace(a);//traces 0 

var b:int = (4.1-1.7)/2.4; 
trace(b);//traces 0 

var c:Number = (4.1-1.7)/2.4; 
trace(c);//traces 0.9999999999999998 
+0

[Что каждый программист должен знать о плавающей запятой] (http://floating-point-gui.de/) – Barmar

+0

Извините за дублирование. Я попытался выполнить поиск, прежде чем я разместил вопрос. –

+0

Добавляя к ответу Чипа из-за восприимчивых незначительных неточностей, каждая из ваших переменных равна '0.9999999999999998', но поскольку первые два набираются как' uint' и 'int', эти числа усекаются (не округляются) до '0'. – TheDarkIn1978

ответ

0

Это происходит потому, что в большинстве реальных языков, не целые числа хранятся с использованием плавающей (http://en.wikipedia.org/wiki/Floating_point), который по своей природе восприимчив к незначительным неточностям.

Смежные вопросы