【问题标题】:Parse string to floating point number将字符串解析为浮点数
【发布时间】:2021-06-30 09:07:31
【问题描述】:

我正在努力解析我从 txt 文件中读取的一些字符串。当我使用 parseFloat() 解析它时,它无法按预期工作,例如,当我记录一个解析为浮动的“45.64”时,它显示:45.63999938964844。 这是我的代码:

  const linesProd = productosTxt.split(/\r?\n/);
  var productosObject = { "Productos": [] };
  linesProd.forEach(line => {
    const fields = line.split("|");
    
    if (fields[0]){
      console.log(fields[0])
      console.log(typeof(fields[5]))
      var fieldsObject = {
        productId: fields[0],
        id: fields[1],
        name: fields[2],
        cost: Number.parseFloat(fields[3]),
        price1: Number.parseFloat(fields[4]),
        price2: Number.parseFloat(fields[5]),
      };
      
      productosObject = { ...productosObject, "Productos": [...productosObject.Productos, fieldsObject] };
    }
  });

这些字段(成本、价格 1、价格 2)应该以数字格式保存我的 txt 文件中的这些字段。 txt 文件中的行如下所示:

A1|1|name1|50.5|70|80

A2|2|name2|25.25|35.6|90.15

我已经看过这里的一些帖子,但找不到合适的答案

任何帮助将不胜感激,谢谢

编辑1: 数组中字段的日志(更改了一些变量名称,但它们可能相同,因此您可以看到)

【问题讨论】:

    标签: javascript react-native floating-point


    【解决方案1】:

    试试这个:

    const linesProd = productosTxt.split(/\r?\n/);
    var productosObject = { Productos: [] };
    linesProd.forEach((line) => {
      const fields = line.split("|");
    
      if (fields[0]) {
        console.log(fields[0]);
        console.log(typeof fields[5]);
        var fieldsObject = {
          productId: fields[0],
          id: fields[1],
          name: fields[2],
          cost: Number.parseFloat(fields[3]).toFixed(2),
          price1: Number.parseFloat(fields[4]).toFixed(2),
          price2: Number.parseFloat(fields[5]).toFixed(2),
        };
    
        productosObject = { ...productosObject, Productos: [...productosObject.Productos, fieldsObject] };
      }
    });
    

    将解析修复到小数点后两位,这应该会给你你期望的数字。

    【讨论】:

    • 问题是我必须将这些属性保留为数字,当您使用 tofixed 时它会返回一个字符串
    【解决方案2】:

    改用 +yourString

      const linesProd = productosTxt.split(/\r?\n/);
      var productosObject = { "Productos": [] };
      linesProd.forEach(line => {
        const fields = line.split("|");
        
        if (fields[0]){
          console.log(fields[0])
          console.log(typeof(fields[5]))
          var fieldsObject = {
            productId: fields[0],
            id: fields[1],
            name: fields[2],
            cost: +fields[3],
            price1: +fields[4],
            price2: +fields[5],
          };
          
          productosObject = { ...productosObject, "Productos": [...productosObject.Productos, fieldsObject] };
        }
      });
    

    【讨论】:

    • 它不起作用,它一直以一种意想不到的方式保存数字:“35.94”被转换为 35.939998626708984
    • 这很奇怪,我在我的电脑上试过了,工作正常,你能记录字段数组并将其添加到问题中吗?
    • 完成,我添加了日志图片
    • 记录这个:console.log(+"35.94") 和console.log(+` ${fields[3]} `) 只是为了检查txt中的数字是否有问题
    • 天哪,我刚刚在控制台上记录了该字段并且它是正确的,但是当它被分配时,当值混乱时,它会是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-15
    • 2020-08-30
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多