Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Форматированный вывод float чисел 
:(
    Опции темы
UnDead
Дата 30.3.2009, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 8.6.2006

Репутация: нет
Всего: нет



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

PM MAIL   Вверх
underW
Дата 30.3.2009, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 142
Регистрация: 22.9.2008

Репутация: 2
Всего: 3



Код

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


PM MAIL   Вверх
UnDead
Дата 30.3.2009, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 8.6.2006

Репутация: нет
Всего: нет



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;
}


PM MAIL   Вверх
underW
Дата 30.3.2009, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 142
Регистрация: 22.9.2008

Репутация: 2
Всего: 3



ну да,  в JavaScript нет конкретной функции, которая бы формировала число с разделением груп как это делает  number_format().
PM MAIL   Вверх
ksnk
Дата 30.3.2009, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



Код

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, ну да это непринципиально, и число знаков после запятой тоже не ограничивает...


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
IDVsbruck
Дата 30.3.2009, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 778
Регистрация: 12.11.2006

Репутация: 7
Всего: 22



Цитата(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));

PM MAIL   Вверх
MyDarkSide
Дата 7.10.2009, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 21.3.2008

Репутация: нет
Всего: -1



Делаю так
Код

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 руб. 


Это сообщение отредактировал(а) MyDarkSide - 7.10.2009, 16:56
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0583 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.