2017-02-27 153 views
-1

我有一系列数字。例如:显示小数点后最多显示3位数的数字

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

来自旧帖子。它似乎工作。

+1

从我挂这个问题的答案在这里也适用(略有修改): val =(Math.floor(val * 1000)/ 1000).toString() – Psi

+1

查看关于重复的第二个答案,回答你的问题。 – Li357

回答

1

不知道这是最好的方式,但它的工作原理使用一元+操作打印前

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

(注意,这给出了问题中每个示例3.456的输出,而不是3.457) – Aligma

1

只投固定字符串回数:

var floats = [3, 3.4567, 4.5, 5.72, 6.12345] 
 

 
function toMax3Decimals (x) { 
 
    return +x.toFixed(3) 
 
} 
 

 
console.log(floats.map(toMax3Decimals))

+3

你击败了我几秒钟。如果OP不知道,转​​换为数字可以消除尾随零。 – Li357

2

您可以使用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]