代码之家  ›  专栏  ›  技术社区  ›  dotty

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

  •  23
  • dotty  · 技术社区  · 14 年前

    嘿,我有一些这样的花车

    4.3455
    2.768
    3.67
    

    我想把它们展示成这样

    4.34
    2.76
    3.67
    

    我不想上下取整这个数字,只要把小数点后显示的数字限制在2就行了。

    6 回复  |  直到 13 年前
        1
  •  50
  •   T.J. Crowder    14 年前

    你在找 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
    
        2
  •  11
  •   igloczek    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
    
        3
  •  6
  •   Andy E    14 年前

    如果不想四舍五入到小数点后两位,请使用 toFixed() 四舍五入 n个 小数点后除2位以外的所有数字都要切掉:

    var num = 4.3455.toFixed(20);
    alert(num.slice(0, -18));
    //-> 4.34
    

    注意,当小数位数传递给 固定() 小于传入的实际数字的小数位数,并且这些小数位数是大数。例如 (4.99999999999).toFixed(10) 会给你 5.0000000000 . 但是,如果可以确保小数位数小于传递给 固定() . 不过,它确实使@TJ的解决方案更加健壮。

        4
  •  5
  •   ingdc Srini Karthikeyan    7 年前

    警告! 当前接受的解决方案在某些情况下失败,例如4.27错误地返回4.26。

    这是一个 general solution 那总是有效的。

    (也许我应该把这个作为评论,但在撰写本文时,我没有必要的声誉)

        5
  •  2
  •   NVRM    6 年前

    大家好消息!有一段时间,有一种选择: toLocaleString()

    虽然它并不是完全为舍入而设计的,但是有一些有用的选项参数。

    最小整数

    要使用的最小整数位数。可能的值为1到21;默认值为1。

    最小分位数

    要使用的小数位数的最小数目。

    可能的值为0>到20;普通数字和百分比格式的默认值为0;t

    货币格式的默认值是次要单位的数目 ISO 4217货币代码表提供的数字(如果列表 不提供这些信息)。

    最大分数位数

    要使用的分数位数的最大数。

    可能的值为0>到20;普通数字格式的默认值为minimumFractionDigits和3中的较大值

    货币格式的默认值是minimumFractionDigits和minor unit中的较大值 ISO 4217货币代码表提供的数字(如果列表 不提供该信息);百分比格式的默认值 是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)
    )

    ​​​​​​

        6
  •  1
  •   mmgc84    10 年前

    使用toPrecision:)

    var y = 67537653.76828732668326;
    y = (String(y).indexOf('.') !== -1) ? +y.toPrecision(String(y).indexOf('.') + 2) : +y.toFixed(2);
    // => 67537653.76
    

    第二行中的2表示小数位数,这种方法返回一个数字,如果需要字符串,请删除“+”运算符。