2014-11-02 2 views
2

Сервер предоставляет JSON, содержащую строку , такую ​​как 1234567.89.Круглая строка javascript и отображение формата доллара без десятичных знаков

Как его преобразовать в $ 1,234,568?

Основано на How can I format numbers as money in JavaScript?, я могу преобразовать его в $ 1,234,567.89.

return "$ " + parseFloat(n).toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, "$1,"); 

Пока не идеально, потому что она округляет вниз по сравнению с раундами до ближайшего доллара, я бы подумал следующее будет работать, но это не делает:

return "$ " + parseFloat(n).toFixed(0).replace(/(\d)(?=(\d{3})+\.)/g, "$1,"); 

Я также безуспешно пытался следующее:

return "$ " + Math.round(parseFloat(n)).replace(/(\d)(?=(\d{3})+\.)/g, "$1,"); 

ответ

3
function roundToDollars(n) { 
    return "$ " + 
     parseFloat(n).toFixed(0) 
      .replace(/(\d)(?=(\d{3})+$)/g, "$1,"); 
} 

Обратите внимание, что я не думаю, что функция вы просите это хорошая идея:

  • Вы используете (неточные) поплавки для десятичной арифметики.
  • и ваш ввод здесь - «n» - это строка, когда она действительно не является строкой.
  • это звучит для меня так же, как «формат номера» и «префикс $» и «круглые до ближайших» битов являются ортогональными, а более чистый API не будет придерживаться этого в одной функции.

Кстати, все, что я изменил из вашего примера было обнаружение «Терминатор» - поскольку сумма округляется, я не искал точки (\.), а просто конец строки ($) , Чтобы быть совместимым с обоими, вы можете использовать регулярное выражение /(\d)(?=(\d{3})+(\.|$))/g.

+1

Кажется, что нужно работать ... http://jsfiddle.net/7ohvux2a/3/ – user1032531

+0

+1 это действительно правильное регулярное выражение – anubhava

1

Попробуйте это:

function formatNumber(val){ 

    val = Math.round(parseFloat(val)); 
    while (/(\d+)(\d{3})/.test(val.toString())){ 
     val = val.toString().replace(/(\d+)(\d{3})/, '$1'+','+'$2'); 
    } 

    return '$ ' + val; 

} 

alert(formatNumber(1234567.89)); 

Fiddle:

http://jsfiddle.net/dybg5ye1/2/

Редактировать: забыл знак доллара :)

+0

Спасибо foxygen. Какова цель заявления while? – user1032531

+0

Это позволяет нам выполнять итерацию по строке, ища по крайней мере одну цифру, за которой следуют 3 числа, а если найдено, вставляется запятая и значение обновляется. Как только это условие больше не выполняется - цикл завершается, и возвращается форматированное значение – foxygen

Смежные вопросы