在 dart 中将字符串解析为 double 时出错

问题描述 投票:0回答:3

我正在尝试使用 Dart 从 CSV 文件中读取数据。我正在使用的代码从文件中读取行并使用 split() 方法将它们拆分为列。其中一列包含字符串格式的数字数据,我需要将其转换为双精度数。但是,当我尝试使用 double.parse() 方法解析字符串时,出现 FormatException: Invalid double 错误。 (字符串是“1.5”应该可以正常使用)

map[columns[5]] = (map[columns[5]] ?? 0) + double.parse(columns[3]);

这是显示的错误:

Reading from file: .\\test.csv
Unhandled exception:
FormatException: Invalid double
"1.5"
#0      double.parse (dart:core-patch/double_patch.dart:112:28)
#1      main (...)
#2      _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:295:33)
#3      _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:192:26)

我曾尝试使用 trim() 方法在解析字符串之前从字符串中删除任何空白字符,但错误仍然存在。我还检查了 CSV 文件中的数据,并确认它的格式正确为十进制数。

flutter dart parsing read.csv
3个回答
0
投票

你会这样跟着

void main() {
var value1 = "1.5";
var value2 = double.parse(value1);
print(value1);
print(value2);

var value3 = value2 + double.parse(value1);
print(value3);
}

回答


0
投票
map[columns[5]] = (map[columns[5]] ?? 0) + double.parse(columns[3].trim());

0
投票

错误信息:

FormatException: Invalid double
"1.5"

表示您在字符串

double.parse
上调用
"1.5"
包括双引号字符。你必须先把它们脱掉。您可以通过多种不同的方式来做到这一点,例如:

String unquote(String s) =>
    (s.length < 2 || !s.startsWith('"') || !s.endsWith('"'))
        ? s
        : s.substring(1, s.length - 1);

void main() {
  var s = '"1.5"';
  print(s); // Prints: "1.5"
  print(unquote(s)); // Prints: 1.5
  print(double.parse(unquote(s))); // Prints: 1.5
}

或者更好的方法是使用适当的 CSV 解析器,它应该为您处理未引用的字段。请注意,如果您的 CSV 文件包含带有嵌入式逗号的字符串,那么天真地使用

String.split
可能会导致不正确的结果。 (我没有亲身使用过,不过
package:csv
应该会合适吧。)

© www.soinside.com 2019 - 2024. All rights reserved.