关于浮点数误差以及四舍五入

https://blog.csdn.net/Xavier_97/article/details/126931927

由于很玄学,我们考虑统一使用库函数round和自己手写round来实现最终输出整数的四舍五入小数保留k位的四舍五入

#include <iostream> #include <cmath> using namespace std; int main() { double a = 1.4999999; double b = 1.5000001; double n_a = -1.4999999; double n_b = -1.5000001; cout << round(a) << endl; // 1 cout << round(b) << endl; // 2 cout << round(n_a) << endl; // -1 cout << round(n_b) << endl; // -2 return 0; }

要得到四舍五入小数点后的结果,我们可以将小数转换为整数来处理,然后再转换为小数。

  • 例如我们需要将1.2345这个数保留小数点后两位四舍五入,我们可以先将其乘以100转换为123.45,然后套用整数的方法来进行四舍五入,再将其除以100转换为小数。
#include <iostream> using namespace std; // 用于四舍五入 int round_0 (double n) { // 若为负数,则先化为正数再进行四舍五入 if (n > 0) return n - int(n) >= 0.5 ? int(n)+1 : int(n); else return -n - int(-n) >= 0.5 ? -(int(-n) + 1) : -int(-n); } int main() { double a = 1.2345; double b = 1.2355; double n_a = -1.2345; double n_b = -1.2355; a = round_0(a * 100.0) / 100.0; b = round_0(b * 100.0) / 100.0; n_a = round_0(n_a * 100.0) / 100.0; n_b = round_0(n_b * 100.0) / 100.0; cout << a << endl; // 1.23 cout << b << endl; // 1.24 cout << n_a << endl; //-1.23 cout << n_b << endl; // -1.24 return 0; }

__EOF__

本文作者爱飞鱼
本文链接https://www.cnblogs.com/mathiter/p/17882056.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   potential-star  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示