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.

Читайте также

Наши браузеры. Какие они?
Пару дней назад мне пришлось поспорить с одним человеком по поводу того, какие браузеры существуют и что они из себя представляют. Похоже, разветвление проекта Netscape сразу на три направления, внесло некоторую путаницу в головы веб-мастеров.
2001
Определяем границу символа в UTF-8
В Телеграме попросили рассказать как работает код, который я приводил вчера в заметке про ускорение функции, возвращающей количество символов в строке с кодировкой UTF-8. Там действительно есть что рассказать, но рассказ придётся разбить на несколько частей.
2024
Браузеры и стандарты: Ахиллес и черепаха
На «Хабре» кто-то в очередной раз кто-то наткнулся на статью полугодовой давности и понеслось — сделаны далекоидущие выводы. Упомянутая статья за полгода не обновлялась (о чём говорит отсутствие упоминания об SVG в IE9), так что предпосылки неверные.
2010

Комментарии 2

Ramon (rembish.ru) № 1
Стандарт --до конца-- не смотрел, но сразу же возникает вопрос — после запятой фиксировано два знака или это настраиваемое ограничение? Потому как, биржевики без проблем работают с десятыми-сотыми копеек. Да и валюты колебаются с четырьмя знаками после запятой.