1

我使用代码在我的值后添加零并从互联网上获取帮助并找到此代码

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

并添加到我的项目中,但后来我发现这段代码不适用于美分,我用我的测试用例检查了这段代码,发现它不能正常工作。如果我使用 value0.99它的 convert into0.00并且当我使用 value45它的工作正常45.00但是当我使用extra cost is 0.99 cents它的 convert into NaN. 我试图找到每一个地方,但没有成功。那么有没有办法找到值中的数字并检查它,如果它是数字,它应该添加零,如果它的美分它应该与美分值一起使用,如果该值与字符串一起使用它也应该使用它。

我找到了解决方案,就在这里。

        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 回答