在Javascript中将字符串转换为负浮点数

在Javascript中将字符串转换为负浮点数,javascript,implicit-conversion,Javascript,Implicit Conversion,我从后端应用程序获得的负值是根据我们的内部配置(UI用户配置文件)格式化的。换句话说,对于值-23.79879,我的xml输入可能是 -23.79879或2379879-或其他我无法关闭格式设置假设格式为“标准”,通常用于本地化。 我希望做一些类似的事情: convertStringToNumber(numberString, formatString, slignPosition) 不确定formatString是什么意思,但可能是这样的 function convertStringToNu

我从后端应用程序获得的负值是根据我们的内部配置(UI用户配置文件)格式化的。换句话说,对于值-23.79879,我的xml输入可能是
-23.79879
2379879-
或其他
我无法关闭格式设置
假设格式为“标准”,通常用于本地化。
我希望做一些类似的事情:

convertStringToNumber(numberString, formatString, slignPosition)

不确定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-"))

实现这一点的最简单方法是从后端公开解析规则,后者显然知道格式。这可以通过多种方式完成,但我喜欢的一种简单方法是分解格式的所有移动部分,为对象上的每个部分定义属性,然后将该对象公开给解析器

对象可能看起来像这样:

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(opts,'2345.234-')//-2345.234

数字会有千位分隔符和十进制分隔符吗?例如,是否存在
-2123.79879
=千位分隔符)或
-2.12379879
=千位分隔符)?如果可以,那么您必须假设只有一个符号(
)存在并且恰好位于其中一个的有效位置(例如
1234
,可能是“1和234百分之一”或“一千二百三十四”)。您已经向后端应用程序的供应商提交了错误报告,对吗?:-)API应以明确、一致的格式发送数据。本地化表单是供用户使用的,而不是供软件使用。我确实提出了一个bug,但它很快被修复的可能性很小:-(