C# 输入字符串的格式不正确,十进制错误。请在精度大于4时进行分析

C# 输入字符串的格式不正确,十进制错误。请在精度大于4时进行分析,c#,type-conversion,decimal,C#,Type Conversion,Decimal,我在C#中遇到了一个问题,试图使用decimal.Parse转换十进制,十进制精度为4或更高。它抛出了一个错误: 输入字符串在尝试执行时“格式不正确” 值为0.00006或更高精度的函数 我尝试过使用InvariantCulture,并排除了这一问题,因为我认为这是建议其他人出现此错误的原因 我也尝试过使用decimal.Parse,但没有效果 正在执行的代码行是: Decimal decVal = Decimal.Parse(Value.ToString()) 其中,值是字符串“0.0000

我在C#中遇到了一个问题,试图使用
decimal.Parse
转换十进制,十进制精度为4或更高。它抛出了一个错误:

输入字符串在尝试执行时“格式不正确” 值为0.00006或更高精度的函数

我尝试过使用
InvariantCulture
,并排除了这一问题,因为我认为这是建议其他人出现此错误的原因

我也尝试过使用
decimal.Parse
,但没有效果

正在执行的代码行是:

Decimal decVal = Decimal.Parse(Value.ToString())
其中,值是字符串“0.00006”


以前有人见过这个问题吗?这是十进制解析函数固有的问题,还是我正在做的事情?

我发现了。当精度超过4位时,ToString返回科学记数法,所以修复方法是使用以下代码:

Decimal decVal = Decimal.Parse(Value.ToString(), NumberStyles.AllowExponent | NumberStyles.AllowDecimalPoint)
通过阅读这个问题,我们发现:


感谢所有提供输入的人!

对我有用-这可能是文化问题(或者字符串中有不可见的字符)我稍微编辑了一下您的代码以使用格式,在此过程中,我用一个变量替换了一行英文描述。我所做的一切都正确了吗?这段代码是否仍会重现您的问题?我不想戏剧性地更改代码,但它需要格式化,所以我想再次检查。调用ToString()的程序员在字符串上确实有奇怪的问题。它实际上是一个字符串吗?@HansPassant如果让我猜的话,我会说它是一个浮点。
ToString()
调用将导致以该精度进行科学记数,这将在
十进制上失败。Parse
@DStanley我如何知道字符串中是否有不可见的字符?在调试器中,看起来只是该字符串,但是否仍有可能在其中有我看不到的额外字符?petelids和Hans Passant我不认为它是一个浮点,我试着把它转换成一个十进制,但如果它是浮点,它就不起作用了。它是一个字符串对象。奇怪的是,它可以在任何小于4的十进制精度下工作,所以它是关于导致它出错的精度。太棒了,不是你可以标记的你自己的答案是否是你问题的正确答案?