【问题标题】:JavaScript: Retrieve negative floating point number from string of mutiple sumsJavaScript:从多个和的字符串中检索负浮点数
【发布时间】:2014-06-21 03:18:09
【问题描述】:

我有一个简单的应用程序,可让我计算开票和存入路线的总金额。但是我想允许用户在一个输入字段中输入多个值;例如: 500+50+36.5-45.2-10

我编写了一个函数,该函数将检索此输入,然后将 split 这个字符串放入 + 符号处的数组元素中,并立即将值解析为数字,然后将它们相加并返回用户输入的总数每个单独的字段。只要用户不使用除+ 之外的任何符号,这一切都很好。

我搜索了regexp的用法:

但似乎没有任何结果有效。 如何让我的代码检索值,以便将负值作为负值传递到数组中?

这是我的 Js 代码的 sn-p: 完整代码请访问我的fiddle

totalInvoiced: function () {

    var a = A.invoiced.value;
    var value1Arr = []; 
        value1Arr = a.split("+").map(parseFloat);
    var value1 = 0;
        value1Arr.forEach(function (value) {
        value1 += value;
    });

【问题讨论】:

  • 仅当用户只输入一个负数时才有效。如果您将replace 的第一个参数填写为a.replace(/(\-)/g, "+-").split("+") 并将g 属性设置为regexp,则它可以工作,但是很麻烦。谢谢;)
  • 是的,几秒钟后我修好了。 :) 无需在那里转义- 或使用括号。我已经添加了一个答案,如下所示。
  • 两种解决方案最终都有效,但/\+|(?=-)/ 在代码方面更简洁。谢谢;)

标签: javascript regex floating-point


【解决方案1】:

我真的很喜欢 PhistucK 的解决方案,但这里是正则表达式的替代方案:

value1Arr = a.split(/(?=\+|\-)/);

这将拆分它,但保留分隔符,因此结果将是:

["500", "+50", "+36.5", "-45.2", "-10"]

【讨论】:

  • 也许是value1Arr = a.split(/\+|(?=-)/);,所以优点被放弃了?这是我最初想建议的,但我不知道?=,我尝试了?:。谢谢你教我这个技巧!
  • 不,它会降低优点,而您的则保留优点。是的,当然,如果这是您的意思,解析时最终会是相同的。
  • 是的,这就是我的意思,解析后:)
【解决方案2】:

有点脏,但也许a.replace(/-/g, "+-").split("+"),这样,你在每个减号之前添加一个加号,因为负数基本上没有运算符。

【讨论】:

    【解决方案3】:

    您可以使用这种在 + 号或 - 号之前拆分的模式:

    var str = '500+50+36.5-45.2-10';
    
    console.log(str.split(/\+|(?=-)/));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-03
      • 2013-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多