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

f3temu5u  于 2023-04-07  发布在  Flutter
关注(0)|答案(3)|浏览(179)

我尝试使用Dart从CSV文件中读取数据。我使用的代码从文件中读取行,并使用split()方法将它们拆分为列。其中一列包含字符串格式的数字数据,我需要将其转换为double。然而,当我尝试使用double.parse()方法解析字符串时,我得到FormatException:无效的双重错误。(字符串为“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文件中的数据,并确认它被正确地格式化为十进制数。

dzjeubhm

dzjeubhm1#

错误消息:

FormatException: Invalid double
"1.5"

表示您正在对字符串"1.5"调用double.parse,该字符串 * 包括双引号字符 *。您必须首先将它们去掉。有许多不同的方法可以做到这一点,例如:

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可能是合适的。)

q1qsirdb

q1qsirdb2#

你会像这样跟随

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

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

答案

j9per5c4

j9per5c43#

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

相关问题