2010-01-08 2 views
3

Я выполняю вычисления с числами и хотел бы только напечатать целое число (число без десятичных знаков).Метод Numbercript 'toFixed() методаcriptcript возвращает странные значения

Я думал, что метод toFixed() класса Number будет делать трюк, и он делает большую часть времени. Но довольно часто появляются странные значения. Вот 2 примера:

  • Number(0.002).toFixed(0) возвращает "0." в то время как Number(1.002).toFixed(0) возвращает "1" (без периода)

  • После того, как в то время, Number(0.002).toFixed(0) возвращает "1"

Само собой разумеется это не ожидаемое поведение. Я не использую этот метод правильно?

** Редактировать: ** Я знаю, что мне просто нужно сделать int(0.002), чтобы получить 0, но я хотел бы понять это странное поведение.

ответ

7

Это известная ошибка. Обходное решение unsexy должно использовать либо использование Math.round(), либо просто проверку возвращенной строки для этого периода ожидания.

См сообщение об ошибке в JIRA здесь: http://bugs.adobe.com/jira/browse/FP-1595

1

Я тестировал оба на Flex SDK 3.4 и Flex SDK 4.0, и это похоже на ошибку, возможно, опубликовать ее на bugs.adobe.com? Хотя я думаю, что это может быть связано с Flash Player, а не с Flex.

В любом случае, если вы пытаетесь преобразовать число в строку без десятичных мест, где вы можете использовать это в качестве обходного пути:

Math.round(theNumber).toString() 

Это позволит избавиться от всех цифр после запятой.

+0

спасибо за тестирование на flex 4. Я отправлю сообщение об ошибке. Ваше решение, однако, вернет «1», когда число = 0.902, например, и мне нужно вернуть «0». –

+3

Тогда как насчет использования Math.floor() вместо Math.round() –

+0

Право, Math.floor, спасибо за исправление, рассеянность станет для меня концом. –

0

Просто FYI для тех, кто читает этот вопрос: очевидно, что это a known bug, но я хотел бы отметить, что я вижу этот вопрос с SDK Flex 4.0, а также ток Flex 4.1 SDK. На сайте Adobe bugs I've asked for clarification о том, когда это было исправлено (билет говорит «Решено: 02/26/09 01:28 PM», но не какая версия якобы содержит исправление).