ECMAScript 4 people
В ECMAScript 4 (JavaScript2 будет основан на этом языке) наконец-то появилась поддержка decimal — специального типа для работы с числами с фиксированным количеством десятичных знаков после запятой. В частности, это облегчит работу с денежными операциями.
Проблематику все понимают? Если нет, то хотя бы попробуйте сложить 0.1 и 0.7, умножить сумму на десять и округлить вниз в любом языке, который поддерживает числа с плавающей точкой. В языке, где числа с плавающей точкой представляются в соответствии со стандартом IEEE 754 (что у вас есть под рукой? JavaScript, Perl, PHP, MySQL) вы получите число 7. Почему так происходит — тема отдельного разговора, вкратце — дело в представлении числа с плавающей точкой на машинном уровне (на самом деле результатом данной суммы, в данном случае, с точки зрения такой реализации, будет 0.7999999999999999, а не 0.8) .
Decimal — специальный тип (чаще всего можно встретить его в СУБД), который позволяет манипулировать числами с фиксированной точкой. Зафиксировав точку, можно перейти к такому хранению числа, где таких погрешностей не будет.
В EMCAScript 4 (а так же в языках, на нём основанных — ActionScript 3 и JavaScript 2) есть два способа объявить число как decimal:
{
use decimal;
var a = 0.1; // a — decimal
var b = 0.2; // b — decimal
var c = a + b; // c — decimal (0.3)
}
var a = 0.1m; // a — decimal
var b = 0.2m; // b — decimal
var c = a + b; // c == 0.3m
Суффикс «m» пришёл из «C#» и расшифровывается как «money» («деньги»). В остальных языках программирования проблему обходят, работая с целыми числами. Перед выводом их просто делят на 100.
Стандарт --до конца-- не смотрел, но сразу же возникает вопрос — после запятой фиксировано два знака или это настраиваемое ограничение? Потому как, биржевики без проблем работают с десятыми-сотыми копеек. Да и валюты колебаются с четырьмя знаками после запятой.
да, это число можно менять от 1 до 34. поправил соответствующее место в статье.