C#中的奇怪行为:解析字符串以加倍错误

本文关键字:字符串 错误 | 更新日期: 2023-09-27 18:26:30

更新:

这里有一个链接指向一个失败的项目,即使它在VS2015CE.NET4.6中显式地是一个double。https://dl.dropboxusercontent.com/u/20941617/Scratchpad.zip

好吧,我知道如何复制它。当它在代码的显式运算符块上中断时,你只需要直接从调试中复制字符串并将其粘贴到"a"中,即使它看起来像一个正常的字符串,它也会中断。

double a = double.Parse("1");
double b = double.Parse("1");

原件:

为什么"a"有效,但"b"抛出异常:"输入字符串的格式不正确。"?

double a = double.Parse("1");
var b = double.Parse("1");

同样的异常也出现在下面的场景中。

Number n = (Number)"‎1";

Number是我创建的自定义数据类型(结构)。它无法将字符串解析为双精度。

public static explicit operator Number(string n)
{
        double x = double.Parse(n);
        return new Number(x);
}

更奇怪的是,我将结构复制到了一个新项目中,以复制错误。但是在具有相同结构的原始项目中,它不会引发异常。

我从一个文本文件中加载常量,并将它们转换为数字,这很好。这些常数起作用:

pi,3.14159265358979323846,none
π,3.14159265358979323846,none
golden ratio,1.61803398874989484820,none
phi,1.61803398874989484820,none
φ,1.61803398874989484820,none

但当它达到这个常数时,它会抛出同样的异常。

Euler's constant,0.577215664901532860606512,none

它也把它扔到"0.1"上,但不是一直。。。这真的很令人困惑,这就是为什么我做了一个新项目,但由于某种原因,它在新项目中的表现有所不同。

我在所有项目中都使用.NET 4.6。我最初使用5.4.2,但更改了它。两个版本的问题似乎都一样。

C#中的奇怪行为:解析字符串以加倍错误

这是隐藏字符的常见复制/粘贴问题

在您的代码中,b的"1"长度为2个字符

第一个字符是unicode 8206,而第二个字符是49,它是1

做一些清洁,它应该工作