Мы используем версию 3.6. Мы называем функцию округления для очистки десятичной части. Что-то вроде этого ...Как исправить ошибку простого умножения Adobe Flex
private function ceilingRounding(value:Number, power:Number):Number
{
var scale:Number = Math.pow(10, power);
return (Math.ceil(value * scale)/scale);
}
В результате функции неожиданно для следующих значений: значения = 76.7549, масштаба = 10000. Результат должен быть 76,7549, но мы получим 76,7550
Используя отладчик, мы видим это значение * шкала = 767549.0000000001. Конечно, это будет округлено до 76.7550, но почему мы получаем .0000000001 и как мы можем это исправить?
Классический [точка точности с плавающей] (https://www.google.com/search?q=flickr#q=floating+point+precision) вопрос. Это будет то же самое в javascript или даже на Java (хотя в Java вам придется пройти еще много мест после запятой, чтобы встретить его). – RIAstar
Я согласен с вами, если «76.7549 * 1000000/100» приведет к тому же неправильному значению, но я получаю «767549» без обратной ошибки. Кроме того, что-то вроде «22252 - 22252.03» дает -0.029999999998835847 вместо -0.3. На данный момент кажется, что никакой операции Flex (math) нельзя доверять. До сих пор мне приходилось использовать GraniteDS BigDecimal для выполнения основных математических операций. Я также получил такое же поведение с Flex 4.6. Я не знаю о версии Apache. – Patrick
О вашей последней точке: не будет разницы между версиями Flex; примитивы и математические операции являются чистым Flash/ActionScript, Flex - это всего лишь фреймворк (к сожалению, у него нет никакого биг-кода). – RIAstar