1

コードを使用して値の後にゼロを追加し、インターネットの助けを借りてこのコードを見つけました

$(document).ready(function() {
     //var number = 258.20;
     var number = 2;
     var rounded = number.toFixed(2); // rounded = 258.20
     document.write(rounded);
});

プロジェクトに追加しましたが、後でこのコードがセントで機能しないことがわかりました。このコードをテストケースでチェックしたところ、正しく機能していないことがわかりました。値を使用すると0.99変換され0.00、値を使用すると正常に45動作しますが、変換45.00を使用すると. 私はどこでも見つけようとしましたが、成功しませんでした。数値の場合はゼロを追加し、セントの場合はセント値で機能し、値が文字列の場合はそれでも機能する必要があります。extra cost is 0.99 centsNaN

私は解決策を見つけました。ここにあります。

        function isAlphaNumeric(str) {
            var code, i, len;
            for (i = 0, len = str.length; i < len; i++) {
                code = str.charCodeAt(i);
                if (!(code > 47 && code < 58) && // numeric (0-9)
                    !(code > 64 && code < 91) && // upper alpha (A-Z)
                    !(code > 96 && code < 123)) { // lower alpha (a-z)
                    return false;
                }
            }
            return true;
        };

        //var testCases = "extra cost is 0.99 cents";
        //var testCases = 255;
        //var testCases = 0.36;
        //var testCases = 25;
        //var testCases = 1;
        //var testCases = 1000;
        //var testCases = 10000;
        //var testCases = 100000;
        //var testCases = 0.53789;
        var testCases = 0.43789;
        Number.prototype.formatMoney = function(c, d, t){
            var n = this,
            c = isNaN(c = Math.abs(c)) ? 2 : c,
            d = d == undefined ? "." : d,
            t = t == undefined ? "," : t,
            s = n < 0 ? "-" : "",
            i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "",
            j = (j = i.length) > 3 ? j % 3 : 0;
            return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
        };

        if(isAlphaNumeric(testCases)) {
            document.write((testCases).formatMoney(2, '.', ','));
        } else {
            document.write(testCases);

        }
4

1 に答える 1

0

このtoFixed方法では、変換結果が正しく丸められるとは限りません。

たとえば(0.947).toFixed(0)、ブラウザに応じて「0」または「1」が生成される場合があります。したがって、Internet Explorer 8 以前のバージョンで(0.947).toFixed(0)は「0」が生成されますが、IE9、Firefox、または Google Chrome では同じ変換で「1」が生成されます。

Math.roundと組み合わせて使用toFixed​​すると、これを修正できます。

x=0.947;    s0=(Math.round(x)).toFixed(0)           // '1'
x=0.0947;   s1=(Math.round(10*x)/10).toFixed(1)     // '0.1'
x=0.00947;  s2=(Math.round(100*x)/100).toFixed(2)   // '0.01'
x=0.000947; s3=(Math.round(1000*x)/1000).toFixed(3) // '0.001'
于 2015-08-13T07:13:03.620 に答える