限制javascript中小数位后面显示的数字量

时间:2010-11-23 12:31:28

标签: javascript floating-point decimal limit

干草,我有一些这样的花车

4.3455
2.768
3.67

我希望像这样显示它们

4.34
2.76
3.67

我不想向上或向下舍入数字,只是将小数位后面显示的数字限制为2。

6 个答案:

答案 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.27错误地返回4.26。

这是一个始终有效的general solution

(也许我应该把它作为评论,但在撰写本文时,我没有所需的声誉)

答案 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)
)