gpt4 book ai didi

c# - 关于 C# 中的双重解析

转载 作者:可可西里 更新时间:2023-11-01 08:49:33 25 4
gpt4 key购买 nike

我有以下代码:

var d = double.Parse("4796.400000000001");
Console.WriteLine(d.ToString("G17", CultureInfo.InvariantCulture));

如果我在 Visual Studio 中使用 x86 配置编译并运行它,则会得到以下输出:

4796.4000000000005

如果我改为编译为 x64,我会得到这个:

4796.4000000000015

我意识到使用 32 och 64 位编译一定会影响系统处理 double 值的方式,但是鉴于 C# 将 double 定义为 64 位,此操作的结果不应该与编译配置无关而相同我用?

补充观察

基于关于 double.Parse 的评论,我写了这段代码:

var d0 = double.Parse("4796.400000000001");
double d1 = 4796.400000000001;
Console.WriteLine("d0: " + d0.ToString("G17", CultureInfo.InvariantCulture));
Console.WriteLine("d1: " + d1.ToString("G17", CultureInfo.InvariantCulture));

编译为 x86 时,我得到以下输出:

d0: 4796.4000000000005
d1: 4796.4000000000005

但是当我编译为 x64 时我得到了这个:

d0: 4796.4000000000015
d1: 4796.4000000000005

请注意这些值在 x64 版本中有何不同,但在 x86 版本中没有。

最佳答案

我认为对此问题的简单回答是这是 .NET Framework 中的错误。我就此问题提交了以下票证:

https://developercommunity.visualstudio.com/content/problem/488302/issue-with-double-parser.html

该问题已关闭,原因如下:

The change taken in .NET Core to enable stability in these calculations was large and carried more risk that we typically take in .NET Framework.

关于c# - 关于 C# 中的双重解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55137277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com