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