Javascript 如何准确显示十进制数?

Javascript 如何准确显示十进制数?,javascript,decimal,Javascript,Decimal,也许这是以前问过的问题的重复,但我找不到答案。 我正在使用javascript并尝试显示数字p1*10^p2,其中p1是正整数,p2是整数(负或正)。 不幸的是,由于数字的二进制表示,下面的函数不起作用 function toDisplay(p1, p2) {return p1*Math.pow(10, p2);} 它通常返回一个长的十进制数,这只是我需要的精确形式的近似值。有人能帮我修改这个功能吗?我只需要将p1中的小数点移动p2位(根据p2的符号向左或向右),然后根据需要添加0。我需要一个

也许这是以前问过的问题的重复,但我找不到答案。 我正在使用javascript并尝试显示数字p1*10^p2,其中p1是正整数,p2是整数(负或正)。 不幸的是,由于数字的二进制表示,下面的函数不起作用

function toDisplay(p1, p2) {return p1*Math.pow(10, p2);}
它通常返回一个长的十进制数,这只是我需要的精确形式的近似值。有人能帮我修改这个功能吗?我只需要将p1中的小数点移动p2位(根据p2的符号向左或向右),然后根据需要添加0。我需要一个字符串作为答案。我试图这样做,但我不知道如何使它工作。
如果您需要任何帮助,我们将不胜感激。

因为您处理的是10的幂,而您只关心以十进制显示它们,这将起作用:

function repeatStr(s, n){
    // returns s, repeated n times.
    if(String.prototype.repeat){
        return s.repeat(n);
    }
    var res = "";
    for(var i=0; i<n; i++){
        res += s; 
    }
    return res
}

function getDecimal(p1, p2) {
    // returns the decimal representation, as a string, of p1*10^p2.
    p1 = p1.toString();
    if (p2 === 0) {
        return p1  //p1*10^0 == p1*1 == p1.
    }
    if(p2 > 0) {
        // multiplying by 10^p2 just adds p2 0's.
        return p1 + repeatStr("0", p2); 
    } else {
        // p1 is negative, so we have (-p2)-1 0's after the decimal point.
        return "0." + repeatStr("0", (p2*-1) - 1) + p1;
    }
}
函数repeatStr(s,n){
//返回s,重复n次。
if(String.prototype.repeat){
返回s.repeat(n);
}
var res=“”;
对于(变量i=0;i 0){
//乘以10^p2只会增加p2 0。
返回p1+repeatStr(“0”,p2);
}否则{
//p1是负数,因此小数点后有(-p2)-10。
返回“0.”+repeatStr(“0”,(p2*-1)-1)+p1;
}
}

试试
Math.round(number*100000)/100000
好吧,希望你不要讨厌
eval

function toDisplay(p1, p2) {
    return eval(p1 + 'e' + p2);
}

返回一个浮点数。您可以执行
+“”
使其成为一个字符串。

,您可能想看看这个。您能提供一些示例吗?像p1=?,p2=?你想从这些输入值中得到什么结果?整数不带小数,所以这就是你的问题,例如,如果p1=341,p2=-5,我需要0.00341,而不是0.003499999浮点不能准确地表示大多数小数。这是最接近的了,不客气。顺便说一句,如果p2变大,有一种更快的方法来实现RepeatSTR:。我使用这个版本是因为它更短更清晰,而字符串重复不是这个答案的重点。