Добавление 2 десятичного числа дает неверный результат в Action Script - PullRequest
2 голосов
/ 26 января 2012

У меня проблема со следующим утверждением

trace (10.12 + 13.75) // output 23.869999999999997

Может кто-нибудь объяснить мне, почему это так, и как получить 23,87 из этого?

Спасибо

Ответы [ 2 ]

4 голосов
/ 26 января 2012

Числа с плавающей запятой компьютера не совсем точны.JavaScript (и я предполагаю, что ActionScript, как его вариант) использует 64-битные значения IEEE 754 ( ECMAScript spec ref ).Лучшим примером этой неточности, вероятно, является 0.1 + 0.2, что соответствует 0.30000000000000004.Чтобы получить 23.87, вам нужно округлить.

Если вы занимаетесь финансовой математикой, вы можете (или не можете) лучше использовать библиотеку, которая десятичная математикаа не с плавающей точкой IEEE (что-то вроде класса BigDecimal Java или типа decimal в C #).Но обратите внимание, что десятичные типы имеют свои собственные ограничения, такие как невозможность точного представления 1 / 3.

1 голос
/ 26 января 2012

Это происходит из-за точности формата IEEE.

Простейшим было бы использовать toFixed.

var num:Number = 10.12+13.75;
var numStr:String = num.toFixed(2);
var num2:Number = new Number(numStr);
...