干草,我有一些这样的花车
4.3455
2.768
3.67
我希望像这样显示它们
4.34
2.76
3.67
我不想向上或向下舍入数字,只是将小数位后面显示的数字限制为2。
答案 0 :(得分:43)
您正在寻找toFixed
:
var x = 4.3455;
alert(x.toFixed(2)); // alerts 4.35 -- not what you wanted!
...但看起来你想要截断而不是舍入,所以:
var x = 4.3455;
x = Math.floor(x * 100) / 100;
alert(x.toFixed(2)); // alerts 4.34
答案 1 :(得分:7)
正如T.J回答的那样,toFixed
方法会在必要时进行适当的舍入。它还会添加尾随零,这并不总是理想的。
(4.55555).toFixed(2);
//-> "4.56"
(4).toFixed(2);
//-> "4.00"
如果将返回值强制转换为数字,那么将删除那些尾随零。这比进行自己的舍入或截断数学更简单。
+parseFloat((4.55555).toFixed(2));
//-> 4.56
+parseFloat((4).toFixed(2));
//-> 4
答案 2 :(得分:6)
如果您不希望舍入到2位小数,请使用toFixed()
舍入到 n 小数位并将所有这些小数除去但是2:
var num = 4.3455.toFixed(20);
alert(num.slice(0, -18));
//-> 4.34
请注意,当传递给toFixed()
的小数位数小于传入的实际数字的小数位数且小数位数是大数时,这确实有一个小的下舍入。例如,(4.99999999999).toFixed(10)
将为您提供5.0000000000
。但是,如果您可以确保小数位数低于传递给toFixed()
的小数位数,则不会出现问题。但是,它确实使@TJ的解决方案更加强大。
答案 3 :(得分:5)
答案 4 :(得分:1)
使用toPrecision:)
var y = 67537653.76828732668326;
y = (String(y).indexOf('.') !== -1) ? +y.toPrecision(String(y).indexOf('.') + 2) : +y.toFixed(2);
// => 67537653.76
第二行中的2表示小数位数,这种方法返回一个数字,如果你想要一个字符串删除" +"操作
答案 5 :(得分:1)
大家好消息!一段时间以来,还有一种选择:toLocaleString()
虽然它不是专门为四舍五入而设计的,但还是有一些有用的options参数。
minimumIntegerDigits
要使用的最小整数位数。可能的值是从1>到21。默认值为1。
minimumFractionDigits
要使用的最小小数位数。
可能的值是从0>到20;纯数字和百分比格式的默认值为0; t
货币格式的默认值为次要单位数 ISO 4217货币代码列表提供的数字(如果列表为2, 不提供该信息)。
maximumFractionDigits
要使用的最大小数位数。
可能的值是从0>到20;纯数字格式的默认值是minimumFractionDigits和3中的较大者
货币格式的默认值是minimumFractionDigits和次要单位中的较大者 ISO 4217货币代码列表提供的数字(如果列表为2, 不提供该信息);百分比格式的默认设置 是minimumFractionDigits和0中的较大者。
最小有效数字
要使用的最小有效数字位数。可能的值是1到21。默认值为1。
最大有效数字
要使用的最大有效位数。可能的值是1到21。默认值为21。
用法示例:
var bigNum = 8884858284485 * 4542825114616565
var smallNum = 88885 / 4545114616565
console.log(bigNum) // Output scientific
console.log(smallNum) // Output scientific
// String
console.log(
bigNum.toLocaleString('fullwide', {useGrouping:false})
)
// Return a string, rounded at 12 decimals
console.log(
smallNum.toLocaleString('fullwide', {maximumFractionDigits:12})
)
// Return an Integer, rounded as need, js will convert it back to scientific!
console.log(
+smallNum.toLocaleString('fullwide', {maximumFractionDigits:12})
)
// Return same Integer, don't use parseInt for precision!
console.log(
parseInt(smallNum.toLocaleString('fullwide', {maximumFractionDigits:12}))
)
但是这与问题不匹配,而是四舍五入:
function cutDecimals(number,decimals){
return number.toLocaleString('fullwide', {maximumFractionDigits:decimals})
}
console.log(
cutDecimals(4.3455,2),
cutDecimals(2.768,2),
cutDecimals(3.67,2)
)