このコードを変更して、「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;
}
}