我从后端应用程序获得的负数值是根据我们的内部配置(UI用户配置文件)格式化的。换句话说,对于值 -23.79879 ,我的xml输入可能是
<myNumber>-23.79879</myNumber>
或<myNumber>23,79879-</myNumber>
或其他,我无法关闭格式。
假设格式是“标准”,通常用于本地化
我正在做类似的事情:
convertStringToNumber(numberString, formatString, slignPosition)
答案 0 :(得分:1)
不确定你对formatString的意思,但也许是这样的?:
function convertStringToNumber(num){
num=num.split(',').join('.');
if(num.indexOf('-') ==num.length-1){
num='-'+num.substr(0,num.length-1);
}
return parseFloat(num) || null;
}
console.log(convertStringToNumber("-23.79879"))
console.log(convertStringToNumber("23,79879-"))
答案 1 :(得分:1)
实现此目的的最简单方法是从后端公开解析规则,后者显然知道格式。这可以通过多种方式完成,但我喜欢的一种简单方法是简单地分解格式的所有移动部分,为对象上的每个定义属性,然后将该对象暴露给解析器。
对象看起来像这样:
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(选择采用,&#39; 2,345.234 - &#39); // - 2345.234