舍入浮点值
本文关键字:舍入 | 更新日期: 2023-09-27 18:11:11
我的任务是将c++代码移植到c#。客户在我的代码中报告了一个bug。当我进行调试时,得到的结果如下:
c++代码:
double d = -0.0000000000018736038338473693;
String temp = String(SimpleRoundTo(d, -12))); // SimpleRoundTo() is from delphi
// temp is having -1E-12
c#代码:double d = -0.0000000000018736038338473693;
string temp = (Math.Round(d, 12)).ToString();
// temp is having -2E-12
我确实检查了Math.Round()的重载,不知道如何获得相同的结果。
c++版本给出的答案是完全错误的。这应该是显而易见的。很明显,2E-12
是正确答案,因为SimpleRoundTo
和Math.Round
一样,四舍五入。
所以,如果你想在c#中重现c++版本的错误输出,你需要将Delphi RTL代码翻译成c#。这将涉及计算出SimpleRoundTo
和String()
转换的确切作用。或p/invoke到c++ DLL。
查看代码,执行舍入,然后转换为文本。我会寻找一种方法,执行四舍五入作为文本转换的一部分。