我在。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
。Net Core 2.0:
。Net Core 3.0:
如您所见,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之间遇到一些舍入问题。我已经在网上搜索了一段时间,但找不到合适的搜索词,所以我是...What's new in .NET 3.0
部分中:浮点API正在更新,以符合IEEE 754-2008修订版。这些更改的目的是公开所有必需的操作,并确保它们在行为上符合IEEE规范。有关浮点改进的更多信息,请参见.NET Core 3.0博客文章中的Floating-Point Parsing and Formatting improvements。