实现这一目标最简单的方法是揭露从后端解析规则,显然知道格式。这可以通过很多方式完成,但我喜欢的一种简单方法是简单地分解格式的所有移动部分,为每个对象定义属性,然后将该对象暴露给解析器。
的对象可以是这个样子:
var opts = {
thousandsSeparator: ',',
decimalSeparator: '.',
negativeSign: '-'
};
然后将该对象传递到解析函数是这样的:
function parseNumber(opts, str) {
var isNegative = false;
if(str.indexOf(opts.negativeSign) != -1) {
isNegative = true;
str = str.replace(opts.negativeSign,'');
}
var parts = str.split(opts.thousandsSeparator).join('').split(opts.decimalSeparator);
var num = 1 * parts[0];
var deci = 1 * parts[1];
if(deci) num += deci/Math.pow(10,parts[1].length);
return isNegative ? -1 * num : num;
}
你可以这样调用它的Thuis:
parseNumber (选择采用, '2,345.234-'); //2345.234
数字是否有千位分隔符和小数点分隔符?例如,是否可以有'-2,123.79879'(','=千分之一分隔符)或者“-2.123,79879”('.' =千分之一分隔符)?如果可以的话,那么如果只有一个符号(','或'.')存在并恰好处于有效位置(例如'1,234',这可能是“一,二百三十四个”或“一千二百三十四”)。 –
您*已*向后端应用程序的供应商提交错误报告,对不对? :-) API应以明确,一致的格式发送数据。本地化的表格供用户使用,而不是软件。 –
我明确提出了一个错误,但很少有机会很快修复:-( – user3010912