如何将javascript函数修约为1.00而不是0.100?

如何将javascript函数修约为1.00而不是0.100?,javascript,Javascript,我有一个函数formatMoney,它可以将数字转换成千个分隔的字符串,工作起来几乎完美。我今天刚刚注意到,只要输入的数字是x.995xxx,它就很难正确地进行取整。然后将其舍入到0.1000,而不是1.0000 有办法解决这个问题吗?我在几周前从一个SO线程复制了下面的函数,但是再也找不到了 n1=0.9940 n2=0.9950 $('#n1').html(formatMoney(n1,2)) $('#n2').html(formatMoney(n2,2)) 函数(n,dp){ 变量s='

我有一个函数
formatMoney
,它可以将数字转换成千个分隔的字符串,工作起来几乎完美。我今天刚刚注意到,只要输入的数字是x.995xxx,它就很难正确地进行取整。然后将其舍入到0.1000,而不是1.0000

有办法解决这个问题吗?我在几周前从一个SO线程复制了下面的函数,但是再也找不到了

n1=0.9940
n2=0.9950
$('#n1').html(formatMoney(n1,2))
$('#n2').html(formatMoney(n2,2))
函数(n,dp){
变量s=''+(数学层(n)),d=n%1,i=s.length,r='';
而((i-=3)>0){r='.+s.substr(i,3)+r;}
返回s.substr(0,i+3)+r+
(d?,“+数学圆(d*数学pow(10,dp | | 2)):”;
};

正确输出:

0,9900 当前错误输出:

0,1000 所需输出:

1,0000
试试下面的方法

function formatMoney(n, digits){
        var negative = false;
        if (digits === undefined) {
            digits = 0;
        }

        if( n < 0) {
            negative = true;
          n = n * -1;
        }

        var multiplicator = Math.pow(10, digits);
        n = parseFloat((n * multiplicator).toFixed(11));
        n = (Math.round(n) / multiplicator).toFixed(digits);
        if( negative ) {    
            n = (n * -1).toFixed(2);
        }
        //return n;
        var  mystring = n.toString().replace(/\B(?<!\.\d*)(?=(\d{3})+(?!\d))/g, ",");
        mystring = mystring.replace(/[,.]/g, m => (m === ',' ? '.' : ','))
        return mystring;
    };
函数格式货币(n位){
var负值=假;
如果(数字===未定义){
数字=0;
}
if(n<0){
负=真;
n=n*-1;
}
var乘法器=数学功率(10位);
n=parseFloat((n*乘法器).toFixed(11));
n=(数学四舍五入(n)/乘法器).toFixed(数字);
如果(负){
n=(n*-1).toFixed(2);
}
//返回n;
var mystring=n.toString().replace(/\B(?(m===','?':','))
返回mystring;
};
试试下面的方法

function formatMoney(n, digits){
        var negative = false;
        if (digits === undefined) {
            digits = 0;
        }

        if( n < 0) {
            negative = true;
          n = n * -1;
        }

        var multiplicator = Math.pow(10, digits);
        n = parseFloat((n * multiplicator).toFixed(11));
        n = (Math.round(n) / multiplicator).toFixed(digits);
        if( negative ) {    
            n = (n * -1).toFixed(2);
        }
        //return n;
        var  mystring = n.toString().replace(/\B(?<!\.\d*)(?=(\d{3})+(?!\d))/g, ",");
        mystring = mystring.replace(/[,.]/g, m => (m === ',' ? '.' : ','))
        return mystring;
    };
函数格式货币(n位){
var负值=假;
如果(数字===未定义){
数字=0;
}
if(n<0){
负=真;
n=n*-1;
}
var乘法器=数学功率(10位);
n=parseFloat((n*乘法器).toFixed(11));
n=(数学四舍五入(n)/乘法器).toFixed(数字);
如果(负){
n=(n*-1).toFixed(2);
}
//返回n;
var mystring=n.toString().replace(/\B(?(m===','?':','))
返回mystring;
};

您想要这样的东西吗(更新为使用小数点甚至负数)

函数milesIt(num,n=2){
设decimalPoint=num.toString().indexOf(“.”),isNegative=num<0&(num*=1);
return(isNegative&&“-”| |“”)+Math.floor(num.toString().split(“”).reverse().map((n,i,a)=>
(i+1)%3==0&&i+1!=a.length&&“+n | | n).reverse().join(“”)+
(decimalPoint!==-1&“,“+num.toString().slice(decimalPoint+1,decimalPoint+n+1)| |”);
}
假设现金=-1.20389474323;
//解散四舍五入至2
for(设i=1;i<5;i++){
console.log(milesIt(cash*=-10));

}
您想要这样的东西吗(更新为使用小数点甚至负数)

函数milesIt(num,n=2){
设decimalPoint=num.toString().indexOf(“.”),isNegative=num<0&(num*=1);
return(isNegative&&“-”| |“”)+Math.floor(num.toString().split(“”).reverse().map((n,i,a)=>
(i+1)%3==0&&i+1!=a.length&&“+n | | n).reverse().join(“”)+
(decimalPoint!==-1&“,“+num.toString().slice(decimalPoint+1,decimalPoint+n+1)| |”);
}
假设现金=-1.20389474323;
//解散四舍五入至2
for(设i=1;i<5;i++){
console.log(milesIt(cash*=-10));


}
simply
Math.round(0.99)
给你1
Math.round(0.9950)
is
1
我更新了我的帖子,简单地回答你的问题
Math.round(0.99)
给你1
Math.round(0.9950)
is
1
我已经更新了我的帖子来回答你的问题。我尝试了不同的数字作为输入,但它从来不会返回超过2位的数字,这正是我所需要的。有什么解决方法吗?@Phanti修改了答案,根据提供的数字进行取整。n=(数学。舍入(n)/乘法器)。toFixed(数字);谢谢,从数学角度看,它现在可以工作了。您能告诉我如何进一步修复此函数以获得“,”作为数字分隔符吗?我可以设法将千分隔符更改为“.”,然后它将被接受回答:) Thanks@Phanti最后两行已经修改。您现在可以检查。hmh它返回例如365555为3,65.555,应该是365555hmh。我尝试了不同的数字作为输入,但它从未返回超过2位,这是我所需要的。对此有任何修正吗?@Phanti根据提供的数字对答案进行取整。n=(Math.round(n)/multiplicator)。toFixed(digits);谢谢,从数学角度看,它现在可以工作了。您能告诉我如何进一步修复此函数以获得“,”作为数字分隔符吗?我可以设法将千分隔符更改为“.”,然后它将被接受。答案:)Thanks@Phanti最后两行已经修改。您现在可以检查。hmh它返回例如365555为3,65.555,应为3655555。我需要数字分隔符为逗号,千位分隔符a点。这与最初搜索的解决方案相差太远。我需要的功能,以四舍五入到2位默认值和n位的输入,如:函数formatNumber(数字,数字){…}@Phanti好,我已经更新了它,以轮2为默认值,并与负数工作我需要的数字分隔符是逗号和千分隔符a点这是远离最初搜索的解决方案。我需要函数在默认情况下四舍五入到2位,在输入时四舍五入到n位,比如:函数formatNumber(number,digit){…}@Phanti Ok我已经将其更新为默认的四舍五入到2位,并使用负数