我想要将数字格式化为始终显示两位小数,必要时要四舍五入。
例如:
number display
------ -------
1 1.00
1.341 1.34
1.345 1.35
我一直在使用这个:
parseFloat(num).toFixed(2);
但它显示的是1
,而不是1.00
。
我想要将数字格式化为始终显示两位小数,必要时要四舍五入。
例如:
number display
------ -------
1 1.00
1.341 1.34
1.345 1.35
我一直在使用这个:
parseFloat(num).toFixed(2);
但它显示的是1
,而不是1.00
。
function numberFormat(val, decimalPlaces) {
var multiplier = Math.pow(10, decimalPlaces);
return (Math.round(val * multiplier) / multiplier).toFixed(decimalPlaces);
}
请尝试以下代码:
function numberWithCommas(number) {
var newval = parseFloat(Math.round(number * 100) / 100).toFixed(2);
return newval.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
function number_format(string,decimals=2,decimal=',',thousands='.',pre='R$ ',pos=' Reais'){
var numbers = string.toString().match(/\d+/g).join([]);
numbers = numbers.padStart(decimals+1, "0");
var splitNumbers = numbers.split("").reverse();
var mask = '';
splitNumbers.forEach(function(d,i){
if (i == decimals) { mask = decimal + mask; }
if (i>(decimals+1) && ((i-2)%(decimals+1))==0) { mask = thousands + mask; }
mask = d + mask;
});
return pre + mask + pos;
}
var element = document.getElementById("format");
var money= number_format("10987654321",2,',','.');
element.innerHTML = money;
#format{
display:inline-block;
padding:10px;
border:1px solid #ddd;
background:#f5f5f5;
}
<div id='format'>Test 123456789</div>
在调用toFixed()之前,我需要决定使用parseFloat()还是Number()进行转换。以下是一个关于数字格式化的示例,用于捕获用户输入。
HTML:
<input type="number" class="dec-number" min="0" step="0.01" />
事件处理程序:
$('.dec-number').on('change', function () {
const value = $(this).val();
$(this).val(value.toFixed(2));
});
$('.dec-number').on('change', function () {
const value = Number($(this).val());
$(this).val(value.toFixed(2));
});
我喜欢使用Number()而非parseFloat()的原因是,我不需要对空输入字符串或NaN值进行额外的验证。Number()函数会自动处理空字符串并将其转换为零。
var quantity = 12;
var import1 = 12.55;
var total = quantity * import1;
var answer = parseFloat(total).toFixed(2);
document.write(answer);
输入的是字符串(因为使用了解析),所以我们可以仅通过字符串操作和整数计算来获取结果。
let toFix2 = (n) => n.replace(/(-?)(\d+)\.(\d\d)(\d+)/, (_,s,i,d,r)=> {
let k= (+r[0]>=5)+ +d - (r==5 && s=='-');
return s + (+i+(k>99)) + "." + ((k>99)?"00":(k>9?k:"0"+k));
})
// TESTs
console.log(toFix2("1"));
console.log(toFix2("1.341"));
console.log(toFix2("1.345"));
console.log(toFix2("1.005"));
说明
s
表示符号,i
表示整数部分,d
表示小数点后的前两位数字,r
表示其他数字(我们使用r[0]
值来计算四舍五入)k
包含有关最后两位数字的信息(表示为整数)r[0]
大于等于5,则将1
添加到d
- 但是在负数情况下(s=='-'
)并且r
恰好等于5时,在这种情况下我们减去1(出于兼容性原因 - 同样的方式对于负数也适用于Math.round
,例如Math.round(-1.5)==-1
)k
大于99,则将1
添加到整数部分i
var num1 = "0.1";
document.getElementById('num1').innerHTML = (Math.round(num1 * 100) / 100).toFixed(2);
var num2 = "1.341";
document.getElementById('num2').innerHTML = (Math.round(num2 * 100) / 100).toFixed(2);
var num3 = "1.345";
document.getElementById('num3').innerHTML = (Math.round(num3 * 100) / 100).toFixed(2);
span {
border: 1px solid #000;
margin: 5px;
padding: 5px;
}
<span id="num1"></span>
<span id="num2"></span>
<span id="num3"></span>
parseFloat(num.toFixed(2))
- kva使用precision方法扩展Math对象
Object.defineProperty(Math, 'precision',{
value: function (value,precision,type){
var v = parseFloat(value),
p = Math.max(precision,0)||0,
t = type||'round';
return (Math[t](v*Math.pow(10,p))/Math.pow(10,p)).toFixed(p);
}
});
console.log(
Math.precision(3.1,3), // round 3 digits
Math.precision(0.12345,2,'ceil'), // ceil 2 digits
Math.precision(1.1) // integer part
)
我喜欢:
var num = 12.749;
parseFloat((Math.round(num * 100) / 100).toFixed(2)); // 123.75
将数字四舍五入到小数点后2位,
然后确保使用parseFloat()
进行解析,以返回数字而不是字符串,除非您不关心它是字符串还是数字。
parseFloat("1.00") // 1
- Stijn de Witt