Вывод дробного числа в нужном формате

Часто для вывода в отчёте денежной суммы дробное число нужно оформить нужным образом, с разделением на нгултрумы и чертумы (или, скажем, рубли и копейки), также с пробелом или запятой между группами разрядов. Предлагается многофункциональная функция для осуществления такого форматирования.

function FormatFloat(Value, DecimalMark, ThousandSeparator, Prefix, Postfix, NoZero){
        DecimalMark = IsNull(DecimalMark, ',');
        ThousandSeparator = IsNull(ThousandSeparator, ' ');
        Prefix = IsNull(Prefix, '');
        Postfix = IsNull(Postfix, '');
        var Minus = (Math.abs(Value) != Value) ? ' - ' : '';
        Value = Math.abs(Value);
        var Result = '';
        var Cop = Math.round((Value - Math.floor(Value))*100);
        if (Cop.toString().length > 1 || !!NoZero) {
                Result = Result + DecimalMark + Cop.toString();
        } else {
                Result = Result + DecimalMark + '0' + Cop.toString();
        }
        var IsFirstIteration = true;
       
        while (true) {  
                var Thousand = Math.floor(Value) - Math.floor(Value / 1000) * 1000;
                if (IsFirstIteration) {
                        Result = Thousand + Result;
                        IsFirstIteration = false;
                } else {
                        Result = Thousand + ThousandSeparator + Result;        
                }
               
                Value = Math.floor(Value / 1000);
                if (Value == 0) {
                        return Prefix +Minus + Result + Postfix;
                } else {
                        if (Thousand 10) {
                                Result = '00' + Result;
                        } else
                                if (Thousand 100) {
                                        Result = '0' + Result;                         
                                }
                }
               
        }              
}

Параметры:

Value — исходное дробное число.
DecimalMark — десятичная запятая, точка или название валюты на её месте.
ThousandSeparator — пробел или запятая между единицами, тысячами, миллионами и т.д.
Prefix — название валюты перед числом.
Postfix — название валюты или разменной монеты после числа.
NoZero — если true, то 1 копейка, иначе — 01 копейка.

Примеры использования:

FormatFloat(-12345.67)//- 12 345,67
FormatFloat(1000003.62, ' руб. ', null, null, ' коп.')// 1 000 003 руб. 62 коп.

Также сходную задачу решает "коробочная" функция AmountToStr (скрипт scr_ConvertUtils), переводящая число в его написание словами. А если нужно ещё и склонять слово (1 копейка, 2 копейки,5 копеек), можно использовать соответствующий механизм.

Нравится

Поделиться

0 комментариев
Показать все комментарии