【问题标题】:Display numbers with max 3 digits to appear after the decimal point [duplicate]显示小数点后最多显示 3 位数字[重复]
【发布时间】:2017-02-27 02:25:30
【问题描述】:

我有一系列数字。例如:

3, 3.4567, 4.5, 5.72, 6.12345

如果它们是整数或小数点后不超过 3 位数字,如何显示原始数字,如果超过 3 位,小数点后最多显示 3 位数字?这是我想要的:

3, 3.456, 4.5, 5.72, 6.123

我使用了toFixed(),但是它使每个数字在小数点后带有3位。

有什么 Javascript 方法可以用来实现我想要的吗?

--------- 更新 -----------

我从指针中使用了这个:

Math.round(原始*1000)/1000

来自旧帖子。它似乎有效。

【问题讨论】:

  • 我链接的问题的答案也适用于此处(稍作修改):val = (Math.floor(val * 1000) / 1000).toString()
  • 查看副本上的第二个答案,回答您的问题。

标签: javascript


【解决方案1】:

你可以用Number.prototype.toPrecision()四舍五入到小数点后3位,然后parseFloat()结果:

var num = 6.12345;
var precise = num.toPrecision(4); //"6.123"
var result = parseFloat(precise); //6.123

var num = 4.5;
var precise = num.toPrecision(4); //"4.500"
var result = parseFloat(precise); //4.5

如果这些数字在一个数组中,你可以创建一个函数customPrecision来映射:

function customPrecision(num) {
  return parseFloat(num.toPrecision(4));
}

var nums = [3, 3.4567, 4.5, 5.72, 6.12345];
var preciseNums = nums.map(customPrecision); //[3, 3.457, 4.5, 5.72, 6.123]

【讨论】:

    【解决方案2】:

    在打印之前使用一元 + 运算符将固定字符串转换回数字:

    var floats = [3, 3.4567, 4.5, 5.72, 6.12345]
    
    function toMax3Decimals (x) {
      return +x.toFixed(3)
    }
    
    console.log(floats.map(toMax3Decimals))

    【讨论】:

    • 你领先我几秒。如果 OP 不知道,转​​换为 Number 会去掉尾随的零。
    【解决方案3】:

    不确定这是最好的方法,但它确实有效

    Math.floor(3.4567*1000)/1000
    Math.floor(6.12345*1000)/1000
    

    【讨论】:

    • (请注意,根据问题中的示例,这给出了 3.456 的输出,而不是 3.457)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 2022-12-05
    • 1970-01-01
    相关资源
    最近更新 更多