Math.round () неверный расчет в as3? - PullRequest
0 голосов
/ 03 февраля 2012

Может кто-нибудь объяснить это?

enter image description here

что я делаю не так?

Ответы [ 2 ]

4 голосов
/ 03 февраля 2012

Раунд делает правильные вещи.0.285 нельзя точно представить как двоичное значение с плавающей запятой.Как видите, при умножении на 100 оно приближается к 28,4999999 ... что меньше 28,5, поэтому значение округляется в меньшую сторону.

3 голосов
/ 03 февраля 2012

Math.Round (x: Number) округляет x до ближайшего целого числа. В вашем случае 28 является ближайшим целочисленным значением для 28.499999999999996. Так что здесь поведение правильное. Что странно, так это то, что 0.285 * 100 - это не 28.5, а это следствие точности класса Number в as3. Вот немного больше информации об этом и возможном решении:

Неопределенные математические результаты

Также вы можете увидеть этот вопрос:

Очень странная проблема с числом операций

Надеюсь, это поможет.

...