Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > Форматированный вывод float чисел


Автор: UnDead 30.3.2009, 12:48
Такой вопрос.
Есть ли возможность например вывести число 12345,56999 в формате 12 345,56 ?
Тоесть разделить разряды пробелом и ограничить число знаков после запятой ?
Знаю что на пхп есть функция number_format, которая делает такой вывод, а есть ли на яве что-нибудь похожее ?

Автор: underW 30.3.2009, 12:57
Код

NumberObject.toFixed(num) // где num - количество знаков после запятой


Автор: UnDead 30.3.2009, 13:25
underW
Эта функция не решает в полной мере мою задачу. Она только обрезает количество знаков после запятой. А мне ещё требуется разделить разряды тоесть из 34567 сделать 34 567. Пробел вставить.

Вот я порылся в инете кому интерестно функция которая полностью реализует функционал пхпшной функции number_format():
Код

function number_format( number, decimals, dec_point, thousands_sep ) 
{  // Format a number with grouped thousands
    // 
    // +   original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +     bugfix by: Michael White (http://crestidg.com)
 
    var i, j, kw, kd, km;
 
    // input sanitation & defaults
    if( isNaN(decimals = Math.abs(decimals)) ){
        decimals = 2;
    }
    if( dec_point == undefined ){
        dec_point = ",";
    }
    if( thousands_sep == undefined ){
        thousands_sep = ".";
    }
 
    i = parseInt(number = (+number || 0).toFixed(decimals)) + "";
 
    if( (j = i.length) > 3 ){
        j = j % 3;
    } else{
        j = 0;
    }
 
    km = (j ? i.substr(0, j) + thousands_sep : "");
    kw = i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thousands_sep);
    //kd = (decimals ? dec_point + Math.abs(number - i).toFixed(decimals).slice(2) : "");
    kd = (decimals ? dec_point + Math.abs(number - i).toFixed(decimals).replace(/-/, 0).slice(2) : "");
 
 
    return km + kw + kd;
}


Автор: underW 30.3.2009, 13:39
ну да,  в JavaScript нет конкретной функции, которая бы формировала число с разделением груп как это делает  number_format().

Автор: ksnk 30.3.2009, 16:10
Код

function number_format( number )
{
    return number.toString().replace(
        /^(\-?)(\d{1,2})?(\d{3})?(\d{3})?(\d{3})?(\d{3})?(\d{3})?([\.\,](\d+)?)?$/,
        function($0,$sign,$6,$5,$4,$3,$2,$1,$pt,$dec){
            var z=
                ($sign ||'')+
                ($6?' '+$6:'')+
                ($5?' '+$5:'')+
                ($4?' '+$4:'')+
                ($3?' '+$3:'')+
                ($2?' '+$2:'')+
                ($1?' '+$1:'')+
                ($pt?','+($dec|0):'');
            return z;
    });
}

alert([
     number_format(1.234)
    ,number_format(.234)
    ,number_format(100.234)
    ,number_format(1001.234)
    ,number_format(2345678)
]);

Это покороче будет, правда числа только до 999 999 999 999 999 999 может обрабатывать  smile, ну да это непринципиально, и число знаков после запятой тоже не ограничивает...

Автор: IDVsbruck 30.3.2009, 22:58
Цитата(UnDead @  30.3.2009,  12:48 Найти цитируемый пост)
Знаю что на пхп есть функция number_format, которая делает такой вывод, а есть ли на яве что-нибудь похожее ?

Жаль, что ответили ... Дал бы подробный ответ, как в Java это делается:
Код

java.text.DecimalFormat dec_format = new java.text.DecimalFormat("##,###.##");
System.out.println(dec_format.format(12345.56999));

Автор: MyDarkSide 7.10.2009, 11:59
Делаю так
Код

function currencyFormat(num, dec) {
  num = Math.round( num / dec ) * dec;
  num = new Number(num).toFixed(2);   // особенности счета JavaScript ( x/100 не всегда = x*0.01 )
  var s = 0;
  var str = '';
  for( var i=num.toString().length-1; i>=0; i-- ) {
    s++;
    str = num.toString().charAt(i) + str;
    if(num.toString().charAt(i)=='.') s=0;
    if( s > 0 && !(s % 3) ) str  = " " + str;
  } 
  str += " руб.";  
  return str;         
}

 currencyFormat(1561.1178 , 10) ;    //вывод  1 560 руб. 
 currencyFormat(1561.1178 , 0.01) ; //вывод  1 561.12 руб. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)