如何将数字格式化为小数点后 2 位,但前提是已经有小数



我有一个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( 的东西;但还不能让它工作。

谢谢你!

这应该可以完成这项工作:

var formattedNumber = (x * 1.5).toFixed(2).replace(/[.,]00$/, "");

我建议:

Math.round(floatNumber*100)/100;

它会自动添加 0、1 或 2 个小数位。

工作示例: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>

怎么样

var str = num.toFixed(2).replace(/.00$/, '');
const number = Number(Number(value).toFixed(t));

有了这个,您可以将数字转换为正确的小数位数,并在转换回数字时,摆脱所有无用的零。

使用此函数:

//E.g. 0.5 becomes 0.50; 7 stays as 7.
function twoDecimalPlacesIfCents(amount){
    return (amount % 1 !== 0) ? amount.toFixed(2) : amount;
}

如果数字 %1 不返回零,则它不是整数。

//var s='123';
var s='1.2';
s=Number(s);
alert(s%1? s.toFixed(2): s);

parseFloat(Number(25).toFixed(2))

const input1 = 1;
const input2 = 1.1;
const input3 = 1.12;
const input4 = 1.123
const input5 = 1.0;
const input6 = 1.00;

const output1 = parseFloat(Number(input1).toFixed(2));
const output2 = parseFloat(Number(input2).toFixed(2));
const output3 = parseFloat(Number(input3).toFixed(2));
const output4 = parseFloat(Number(input4).toFixed(2));
const output5 = parseFloat(Number(input5).toFixed(2));
const output6 = parseFloat(Number(input6).toFixed(2));
console.log("input: " + input1 + " output: " + output1);
console.log("input: " + input2 + " output: " + output2);
console.log("input: " + input3 + " output: " + output3);
console.log("input: " + input4 + " output: " + output4);
console.log("input: " + input5 + " output: " + output5);
console.log("input: " + input6 + " output: " + output6);

'

value % 1 !== 0 ? value.toFixed(2) : value;

如果你想要更通用的解决方案,基于 odrm 的想法。

function toFixed(value, fractionDigits) {
    return value.toFixed(fractionDigits).replace(/[.,](00)|0$/, '')
}
  const getPercentage = (partialValue, totalValue) => {
    return ((100 * partialValue) / totalValue).toFixed(2).replace(/[.,]00$/, "");
  }; 

你可以只使用这个函数,并在任何你想调用的地方调用它

我建议:

Intl.NumberFormat("en-US").format(<number>);

另一种可能性是将字符串强制转换为数字,并利用 0.00 为 false 的事实来确定它的显示方式:

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

其中:

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

实际上有一个更动态的解决方案来实现这一点。当您的位数发生变化时,这尤其有用。

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

相关内容

  • 没有找到相关文章

最新更新