。Net Core 3.1与.Net Core 2.0 / .Net Framework的周边问题

问题描述 投票:0回答:2

我在。Net Core 3.0。Net Framework / .Net Core 2.x]之间遇到一些舍入问题。

我已经在网上搜索了一段时间,但找不到合适的搜索词,所以我将其发布在这里。

我编写了以下示例控制台应用程序来说明我的问题:

class Program
{
    static void Main(string[] args)
    {
        const double x = 123.4567890 / 3.14159265358979;
        Console.WriteLine(x);

        const double y = 98.76543210 / 3.14159265358979;
        Console.WriteLine(y);

        const double z = 11.2233445566778899 / 3.14159265358979;
        Console.WriteLine(z);

        Console.ReadKey();
    }
}

我在不同的框架上运行了该程序,并获得以下输出:

。Net Framework 4.7.2

  • 39,2975164552063
  • 31,4380134506439
  • 3,57250152843761
  • 。Net Core 2.0:

  • 39,2975164552063
  • 31,4380134506439
  • 3,57250152843761
  • 。Net Core 3.0:

  • 39,2975164552063
  • 31,438013450643936
  • 3,5725015284376096
  • 如您所见,3.0输出与前两个输出不同,并且从浮点后的第13个数字开始具有更高的精度。

我假设.Net Core 3.0的精度更高。

但是我的情况是我想从。Net Framework

迁移到。Net Core 3.0。在迁移之前,我为。Net Framework库编写了测试,以确保在迁移到。Net Core 3.0之后,计算结果是否相同。为此,我只编写了类似的测试:
//Arrange
const double expectedValue = 0.1232342802302;

//Act
var result = Subject.Calculate();
//Assert
result.Should.Be(expectedValue);

如果我迁移代码并运行我写到。Net Framework]的测试,则测试将失败。我有一些细微的差别,例如

Expected item[0] to be 0.4451391569556069, but found 0.44513915698437145.
Expected result to be -13.142142181869094, but found -13.142142181869062.

我的问题是;我该如何以与[[.Net Framework / .Net Core 2.0

相同的方式对。Net Core 3.0
进行四舍五入,所以我不会得到这些细微的差别。谁能解释这种差异/描述

。Net Core 3.1

。Net Framework中的舍入变化?]我在.Net Core 3.0和.Net Framework / .Net Core 2.x之间遇到一些舍入问题。我已经在网上搜索了一段时间,但找不到合适的搜索词,所以我是...
rounding precision .net-framework-version .net-core-3.1
2个回答
0
投票
这很奇怪。...我已经建立了一个包含4个项目的解决方案

    。NET Framework 4.7.2项目

0
投票
这是已记录在案的更改,它使格式化程序和解析器符合IEEE 754-2008。在IEEE Floating-Point文档的What's new in .NET 3.0部分中:

浮点API正在更新,以符合IEEE 754-2008修订版。这些更改的目的是公开所有必需的操作,并确保它们在行为上符合IEEE规范。有关浮点改进的更多信息,请参见.NET Core 3.0博客文章中的Floating-Point Parsing and Formatting improvements
© www.soinside.com 2019 - 2024. All rights reserved.