【问题标题】:C#: Convert String with number and text to floatC#:将带有数字和文本的字符串转换为浮点数
【发布时间】:2014-12-13 22:23:53
【问题描述】:

我正在从 Excel 文件中读取代表价格的列。 (这些行在一个循环中)。

dynamic tempPrice = (range.Cells[i, 15] as Excel.Range).Value2;
float price = (tempPrice == null) ? 0 : (float)tempPrice;

有3种可能的情况:

  • 单元格可能为空(在这种情况下,我将其转换为 0)
  • 单元格可能包含一个数字。
  • 单元格可能包含一串数字和货币名称(例如“140 USD”、“140$”等)。

在第三种情况下(这会破坏我的代码),我怎样才能只获取数字并将其转换为浮点数?

【问题讨论】:

标签: c# .net


【解决方案1】:

您可以使用此代码

float.Parse(tempPrice , NumberStyles.AllowCurrencySymbol | NumberStyles.Number);

【讨论】:

  • TryParse 是一种更好的使用方法。
【解决方案2】:

当您尝试解析值时,您应该首先验证它是否可以在解析之前进行解析。这样做可以避免运行时出现任何类型的错误。

你可以这样做(你可以在那里找到类似的方法:https://social.msdn.microsoft.com/Forums/vstudio/en-US/701df7da-17d8-41b5-b2d2-94b2be9c0191/floattryparse

if(float.TryParse(tempPrice,NumberStyles.AllowCurrencySymbol, out value)
   {
    Console.WriteLine("Converted '{0}' to {1}.", tempPrice, value); 
   }

希望对你有帮助!

【讨论】:

  • 如果提供的答案对您有任何帮助,或者确实是您正在寻找的答案,请将其标记为答案,以便其他人将来知道! :)
  • 谢谢,这很有帮助,但“AllowCurrencySymbol”不能识别此特定 Excel 文件中的所有情况(创建它的人有很多打字错误)。
  • 尝试逻辑或并写入 NumberStyle.Number。至少我认为它应该适用于大约 99% 的情况!让我知道它是否对您有帮助
【解决方案3】:

你可以这样做

float price;
if(!Single.TryParse(Regex.Replace(tempPrice, "\D+$", ""), out price)) {
  price = 0;
}
// if it doesn't enter the condition, then price will have the parsed float value.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-25
    • 1970-01-01
    • 2020-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多