舍入浮点值
Rounding Floating point Values
本文关键字:舍入 更新时间:2023-10-16
我的任务是将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。
查看代码,执行舍入,然后转换为文本。我会寻找一种方法,执行四舍五入作为文本转换的一部分。
相关文章:
- C++将浮点指针值舍入为小数位数
- Boost::posix_time::ptime舍入到给定的分钟数
- 浮点定向舍入和优化
- 为什么输出精度没有正确舍入?
- 使用设置精度时如何阻止数字向上舍入?
- 如何在使用 MPFR 时在提升多精度中设置舍入模式
- OpenCV 细分一致的 Rect2f 到 Rect2i 舍入
- C++ 中的舍入函数
- 舍入 QDecDouble 值,精度最多为两个字符
- 将大 int 转换为浮点数,而不舍入 c++
- 舍入错误检测
- 根据浮点符号对浮点进行舍入的最简单方法是什么
- 将整数舍入到另一个整数的最接近的倍数
- Sizeof 舍入到对齐方式,但编译器仍将对象放在剩余的字节中
- 避免将 Int 转换为双重类型转换舍入
- 浮点数学运算后舍入不一致
- 浮动到绳子而无需舍入
- C++长双精度格式而不舍入
- 是否可以为 AVR 编写一个 constexpr 舍入函数?
- Time_T舍入到几分钟