2013-10-16 20 views
0

我想知道如果这个代码可以被修改,使得它会使“4.5”和“4.5”(或者任何数量只有具有十分之一分别的地方)为4.50(或4.50)......而不是45添加百分之一的地方为一个数字,可以是逗号或句号分隔

我想我需要测试“来源”,看它是否有足够快的格式为“X [,] X”(数字,逗号或句点,数字),但无法成功完成。我一直在使用“toFixed”尝试,但那个食堂的事情了,如果它是4.500或东西(这需要渲染为4500,而不是4.50!)

任何帮助将非常感激。谢谢!

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

为什么4.500应该显示为4500而不是4.50? – showdev

+0

@showdev几个国家使用'.'而不是'''作为[千位分隔符](http://docs.oracle.com/cd/E19455-01/806-0169/overview-9/index.html)。 –

+0

因为在欧洲的一些国家,逗号和小数点被交换。所以“4.500”=“4500”而不是“4.50”,就像它在美国一样。所以功能很好,但是它将“4.5”和“4.5”混淆为“45”而不是“4.50” – user1149499

回答

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

运行在每个分隔符forEach和弄清楚你想如何格式化它。

http://jsfiddle.net/Ek6cJ/

+0

这不是很有效,我在每个回报中都加了一个警报,对于后者来说它会经历一次,但对于前者来说它会经历两次......它应该只检查一次...如果模式匹配“X,X”或“XX”,则更改为“X,X0”或“X.X0”...并返回... – user1149499

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" 
+0

不,这看起来确实如此)我想要的是一个简单的函数,它将模式XBx转换为XBx0,其中X =“digits”B =“逗号或句号”和“x”=“0-9(只是一个数字)“也许我只是解释不清楚? – user1149499