Как мне отформатировать число в 2 десятичных знака, но только если уже есть десятичные знаки? - PullRequest
11 голосов
/ 11 апреля 2011

У меня есть скрипт jQuery 1.5+, и вы выбираете количество в раскрывающемся меню (1, 2, 3 и т. Д.), И оно умножает это количество на $ 1,50, чтобы показать вам общую цену.В основном - это умножение выбранного количества (1, 2, 3 и т. Д.) На базовую цену в 1,50 долл. - НО - я не могу понять, как правильно отобразить цену с десятичными знаками - пример: если вы выберите количество 2,цена отображается правильно как 3 доллара (без десятичных знаков).Но если вы выберете 1 или 3, цена будет отображаться как $ 1,5 / $ 4,5 - пропуская 0 в сотых долях.

Вот код - любая идея, как показать второй 0 в случае, если естьуже не два знака после запятой?3 доллара должны остаться как 3 доллара, но 4,5 доллара должны стать 4,50 доллара и т. Д. - я не могу заставить его работать, не показывая ВСЕ числа с точностью до двух десятичных знаков, и вот где я застрял!

<script type='text/javascript'>     
    $(function() {         
        $('#myQuantity').change(function() {             
            var x = $(this).val();                      
            $('#myAmount').text('$'+(x*1.5));// this is the part that isn't displaying decimals correctly!
        });     
    }); 
</script>

экспериментируя с чем-то вроде result = num.toFixed (2);но пока не могу заставить его работать.

Спасибо, пожалуйста!

Ответы [ 8 ]

57 голосов
/ 11 апреля 2011

Это должно сделать работу:

var formattedNumber = (x * 1.5).toFixed(2).replace(/[.,]00$/, "");
22 голосов
/ 20 февраля 2014

Я предлагаю:

Math.round(floatNumber*100)/100;

Автоматически добавляет 0, 1 или 2 десятичных знака.

19 голосов
/ 11 апреля 2011

Рабочий пример: http://jsfiddle.net/peeter/JxPZH/

$(document).ready(function() {
    $('#itemQuantitySelect_3').change(function() {
        
        var itemPrice = 1.50;
        var itemQuantity = $(this).val();
        var quantityPrice = (itemPrice * itemQuantity);
        if(Math.round(quantityPrice) !== quantityPrice) {
            quantityPrice = quantityPrice.toFixed(2);
        }
        
        $(this).next("span").html("$" + quantityPrice);

    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form action="/" method="post">
    <select id='itemQuantitySelect_3' name="itemQuantity_3">
        <option value='1'>1 Item</option>
        <option value='2'>2 Items</option>
        <option value='3'>3 Items</option>
    </select>
    <span>$1.50</span>
</form>
15 голосов
/ 11 апреля 2011

Как насчет

var str = num.toFixed(2).replace(/\.00$/, '');
4 голосов
/ 11 апреля 2011

если число% 1 не возвращает ноль, оно не является целым числом.

//var s='123';
var s='1.2';

s=Number(s);
alert(s%1? s.toFixed(2): s);
0 голосов
/ 30 апреля 2019

Используйте эту функцию:

//E.g. 0.5 becomes 0.50; 7 stays as 7.

function twoDecimalPlacesIfCents(amount){
    return (amount % 1 !== 0) ? amount.toFixed(2) : amount;
}
0 голосов
/ 20 мая 2018

Существует гораздо более динамичное решение для достижения этой цели. Это полезно, особенно когда ваше количество цифр изменится.

var formattedNumber = (x * 1.5).toFixed(2).replace(/\.0+$|(\.\d*[1-9])(0+)$/, "");

Это закончится так:

+(2.1234).toFixed(2).replace(/\.0+$|(\.\d*[1-9]);
>> 2.12

// but as mentioned it is dynamic
+(2.1234).toFixed(3).replace(/\.0+$|(\.\d*[1-9]);
>> 2.123

+(2).toFixed(3).replace(/\.0+$|(\.\d*[1-9]);
>> 2
0 голосов
/ 07 августа 2017

Еще одна возможность, привести строку в число и использовать тот факт, что 0,00 не соответствует действительности, чтобы определить, как она отображается:

+(1.123456.toFixed(2)) || 0;
>> 1.12

Где как:

+(0.00123.toFixed(2)) || 0;
>> 0
...