0

このコードを変更して、「4,5」と「4.5」(または 10 分の 1 しかない数字) をそれぞれ 4.50 (または 4,50) としてレンダリングするように変更できるかどうか疑問に思っています... 45 ではなく.

最初に「ソース」をテストして、「x[.,]x」(数字、コンマ、またはピリオド、数字)の形式であるかどうかを確認する必要があると思いますが、それを正常に行うことができませんでした。「toFixed」を使用してみましたが、それが 4.500 か何かの場合は混乱します (これは 4.50 ではなく 4500 としてレンダリングする必要があります!)

どんな助けでも大歓迎です。ありがとうございました!

function parse(source) {
    var sep = source.charAt(source.length - 3);

    switch (sep) {
        case '.':
        case ',':
            var parts = source.split(sep);
            var norm = parts[0].replace(/(\.|,|\s)/g, '') + '.' + parts[1];
            break;
        default:
            var norm = source.replace(/(\.|,|\s)/g, '');
    }

    return Math.round(Number(norm));
}

したがって、正しいパターンを識別する正規表現を見つけました: /^\d{1}[.,]\d{1}$/ (括弧内のピリオドの直前にスラッシュが表示されないことに注意してください!!)

次の小さな関数に追加しました。これは、ゼロを追加するか、変数をそのままにしておくだけです。しかし、何らかの理由で、ゼロを追加している部分でクラッシュしています...

function addZeros(number) {
var s = number;
    if (s.match(/^\d{1}[\.,]\d{1}$/)) {  //should only get here on "X,X" or "X.X" cases
        alert(s); //makes it to here, displays only this alert
        s = s.toFixed(2);  //wtf is wrong with this?!!
        alert(s);  //does NOT make it to here.
        return s;
        }
    else {
        alert('All good in the hood.');
        return s;
        }
}
4

2 に答える 2

0

私があなたを正しく理解していれば、これでうまくいくはずです

function parse(s) {
    var found = false;
    ['.', ','].forEach(function (el) { 
        var i = s.indexOf(el);
        if (s[i] === s[s.length - 2]) {
            s = s + '0';
            found = true;
            return false;
        }
    });
    if (!found) {
        return s.replace(/(\.|,|\s)/g, '');
    } else {
        return s;
    }
}

各区切り文字でa を実行し、forEachどのようにフォーマットするかを決定します。

http://jsfiddle.net/Ek6cJ/

于 2013-10-16T19:53:56.270 に答える
0

これはあなたが望むことをしますか?

function parse(source) {
    var dotIndex = source.lastIndexOf('.');
    var commaIndex = source.lastIndexOf(',');
    var numDots = source.match(/\./g).length;
    if (dotIndex > commaIndex && numDots == 1) {
        // Dot-delimited decimal
        return Number(source.replace(/,/g, '')).toFixed(2);
    } else {
        return Number(source.replace(/\./g, '').replace(/,/g, '.')).toFixed(2);
    }
}

> parse("1,200,300.20")
"1200300.20"
> parse("1.200.300,20")
"1200300.20"
> parse("1.200.300")
"1200300.00"
于 2013-10-16T19:54:23.327 に答える