我试图得到一个精确到2位小数的数字,例如这就是我想要的,如果我有数字:
3.456 it must returns me 3.45
3.467 = 3.46
3.435 = 3.43
3.422 = 3.42
我不想向上或向下舍入或只是为了得到我看到的2个位置之后的数字。
由于
好的,这是答案
var a = 5.469923;
var truncated = Math.floor(a * 100) / 100; // = 5.46
感谢大家的帮助。
答案 0 :(得分:2)
假设正数:
代码:
function roundDown(num,dec) {
return Math.floor(num*Math.pow(10,dec))/Math.pow(10,dec);
}
测试:
function test(num, expected) {
var val = roundDown(num,2);
var pass = val === expected;
var result = pass ? "PASS" : "FAIL";
var color = pass ? "GREEN" : "RED";
console.log("%c" + result + " : " + num + " : " + val, "background-color:" + color);
}
test(3.456, 3.45);
test(3.467, 3.46);
test(3.435, 3.43);
test(3.422, 3.42);
基本理念:
如果你想要一个尾随零,你需要使用toFixed(2)
,这将把数字变成一个字符串。
function roundDown(num,dec) {
return Math.floor(num*Math.pow(10,dec))/Math.pow(10,dec).toFixed(2);
}
并且测试用例需要更改为
test(3.456, "3.45");
test(3.467, "3.46");
test(3.435, "3.43");
test(3.422, "3.42");
另一种选择是正则表达式。
function roundDown(num,dec) {
var x = num.toString().match(/(\d*(\.\d{2}))?/);
return x ? parseFloat(x[0]) : "";
//return x ? parseFloat(x[0]).toFixed(2) : "";
}
答案 1 :(得分:1)
使用String操作来实现它。
var n = 4.56789;
var numbers = n.toString().split('.');
result = Number(numbers[0]+"."+numbers[1].substr(0,2));
alert(result);
答案 2 :(得分:0)
您正在将数字看作是一串数字而不是单个数字,因此请将其视为字符串.-
function cutoff(n, cut){
var parts= String(n).split('.'), dec= parts[1];
if(!cut) return parts[0];
if(dec && dec.length>cut) parts[1]= dec.substring(0, cut);
return parts.join('.');
}
var n= 36.938;
cutoff(n,2)
/* returned value: (String)
36.93
*/
如果你想要一个数字, + cutoff(n,2)就可以了。
答案 3 :(得分:0)
function truncateDec(num, decplaces) {
return (num*Math.pow(10,decplaces) - num*Math.pow(10,decplaces) % 1)/Math.pow(10,decplaces);
}
alert(truncateDec(105.678, 2)); // Returns 105.67
alert(truncateDec(105.678, 1)); // Returns 105.6
如果您不需要动态的小数位数
,这可以进一步简化function truncateDec(num) {
return (num*100 - num*100 % 1)/100;
}
alert(truncateDec(105.678)); // Returns 105.67
它是如何运作的?
概念是主截断的工作原理是将剩余的原始小数除以1.余数将是小数位的任何值。余数运算符是%
105.678 % 1 = 0.678
通过从原始数字中减去这个余数,我们只剩下整数。
105.678 - 0.678 = 105
要包含x
小数位数,我们需要先将原始数乘以10乘以该小数位数,然后将小数后移x
个位置。在此示例中,我们将采用x = 2
。
105.678 * 10^2
= 105.678 * 100
= 10567.8
现在,我们通过再次减去余数来重复相同的过程。
10567.8 % 1 = 0.8
10567.8 - 0.8 = 10567
然后按要求返回到地点数量,我们将其除以10 ^ x
10567 / 10^2
= 10567 / 100
= 105.67
希望它有所帮助!