【问题标题】:parsing a string with a double and getting error input string was not in correct format用双精度解析字符串并获取错误输入字符串格式不正确
【发布时间】:2021-04-07 21:19:13
【问题描述】:

我有一个来自 csv 文件的字符串,看起来像这样 ""711,200.00"" 我正在尝试使用此代码将该数字转换为双精度数

collaterel.LoanQty = double.Parse(values[25], CultureInfo.InvariantCulture);

我已取出逗号并尝试转换为双精度,但我仍然得到输入字符串格式不正确

这是我用来去掉逗号的

  if (values[25].Contains(","))
  {
     values[25] = values[25].Replace(",", "");
  }

我尝试了很多文化,但仍然失败。

屏幕截图 double.parse withcultureinfo 不起作用

【问题讨论】:

  • 友情提示不要用double换币。使用decimalSee here

标签: c# csv


【解决方案1】:

由于double.Parse("711,200.00", CultureInfo.InvariantCulture)works,但你输入的是""711,200.00"",你只需要剪掉引号:

collaterel.LoanQty = double.Parse(values[25].Trim('"'), CultureInfo.InvariantCulture);

一般来说,您应该使用double.TryParse 来避免捕获格式无效的异常。

【讨论】:

  • 你解决了真正的问题,那个被我忽略的问题 :)
【解决方案2】:

使用double.Parse

var s = "711,200.00";

Console.WriteLine(double.Parse(s, System.Globalization.NumberStyles.Number));

打印

711200

NumberStyles.Number

111 号

表示使用 AllowLeadingWhite、AllowTrailingWhite、AllowLeadingSign、AllowTrailingSign、AllowDecimalPoint 和 AllowThousands 样式。这是一种合数样式。

【讨论】:

  • 类型不是小数,而是双精度
  • 没有戏剧性,让我们加倍。
猜你喜欢
  • 2013-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多