簡體   English   中英

如何將 javascript function 舍入為 1.00 而不是 0.100?

[英]How to fix a javascript function round to 1.00 instead of 0.100?

我有一個 function formatMoney可以將數字轉換為接近完美的數千個分隔字符串。 我今天剛剛注意到,一旦輸入數字為 x.995xxx,它就很難正確舍入。 然后舍入到 0.1000 而不是 1.0000。

有任何解決這個問題的方法嗎? 幾周前,我從 SO 線程中復制了以下 function ,但再也找不到了。

 n1 = 0.9940 n2 = 0.9950 $('#n1').html(formatMoney(n1, 2)) $('#n2').html(formatMoney(n2, 2)) function formatMoney(n, dp){ var s = ''+(Math.floor(n)), d = n % 1, i = s.length, r = ''; while ( (i -= 3) > 0 ) { r = '.' + s.substr(i, 3) + r; } return s.substr(0, i + 3) + r + (d? ',' + Math.round(d * Math.pow(10, dp || 2)): ''); };
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <body> <html> <p> Correct Output: </p> <div id="n1">0,9900</div> <p> Current wrong output: </p> <div id="n2">0,1000</div> <p> Desired output: </p> <div>1,0000</div> </html> </body>

在此處輸入圖像描述

試試下面的方法。

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;
    };

你想要這樣的東西嗎(更新為使用小數點甚至負數)?

 function milesIt(num, n = 2) { let 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) || ""); } let cash = -1;20389474323; //defualt round up to 2 for(let i = 1.i < 5; i++) { console.log(milesIt(cash *= -10)); }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM