格式化要转换为Double的字符串

本文关键字:字符串 Double 转换 格式化 | 更新日期: 2023-09-27 18:05:54

我正在尝试将string转换为double。输入的字符串总是一个整数…没有小数。例如"90"

double percentToCheck = Convert.ToDouble(String.Format("{0:0.00}", SomeEntity.KeyIDs.SomePercentTrigger));

SomePercentTrigger是我要转换的%。

我得到一个"字符串不是在正确的格式"错误,所以我应该如何格式化这个字符串?我必须对它进行格式化否则在转换过程中也会出现同样的错误

double percentToCheck = Convert.ToDouble(SomeEntity.KeyIDs.SomePercentTrigger);

更新:

SomePercentTrigger是一个简单的string,如"80"..它总是一个整数

格式化要转换为Double的字符串

更新:
您的字符串是"52.0"

必须是引起FormatException'.'
您可能在一台机器上,'.'而不是设置为小数点(例如,我住在德国并使用德国区域设置)。小数点是',')

要解决这个问题,您需要使用CultureInfo.InvariantCulture解析字符串。

var value = double.Parse(myString, CultureInfo.InvariantCulture);

InvariantCulture应该用于应用程序中与数据存储相关的部分。确保在将双精度转换为字符串时也使用它Console.WriteLine(value.ToString(CultureInfo.InvariantCulture));


我怀疑SomeEntity.KeyIDs.SomePercentTrigger中有一些无效字符(除了数字,'。'和可选的前导'-'),例如"80%"

所以这一行是FormatException

double percentToCheck = Convert.ToDouble(String.Format("{0:0.00}", SomeEntity.KeyIDs.SomePercentTrigger));

,因为{0:0.00}格式规则只对数值有效。

这里也会出现同样的异常:

double percentToCheck = Convert.ToDouble(SomeEntity.KeyIDs.SomePercentTrigger);

,因为"80%"不能转换成double类型。

你应该

  • 在失败语句前面添加一些日志记录
  • 或调试该代码

查看SomeEntity.KeyIDs.SomePercentTrigger实际内容是什么

使用double.Parse(string)double.TryParse(string, out value)

尝试格式化字符串是没有意义的。您必须首先将其解析为数字才能格式化它。无论如何,将没有小数的数字解析为双精度数是没有问题的,因此字符串可能不包含您认为它包含的内容。

如果字符串包含整数格式的数字,则将该字符串解析为整数,然后将其转换为双精度类型:

double percentToCheck = (double)Int32.Parse(SomeEntity.KeyIDs.SomePercentTrigger);