融汇资讯网
Article

嵌入式老炮儿教你C++保留两位小数,不四舍五入!

发布时间:2026-01-22 15:30:13 阅读量:8

.article-container { font-family: "Microsoft YaHei", sans-serif; line-height: 1.6; color: #333; max-width: 800px; margin: 0 auto; }
.article-container h1

嵌入式老炮儿教你C++保留两位小数,不四舍五入!

摘要:本文由一位在嵌入式系统领域工作三十年的老码农撰写,旨在为C++程序员提供一种在嵌入式系统中保留小数点后两位而不进行四舍五入的最有效、最可靠、最简洁的解决方案。避免使用任何C++11及更高版本的新特性,强调效率和精度,并直接给出代码示例和简短解释。

开门见山

想在C++里保留两位小数还不四舍五入?简单,直接截断就是了。代码拿去:

double truncateTwo(double num) {
  return (int)(num * 100) / 100.0;
}

原理讲解

先乘以100,把小数点往右挪两位。强制转换成整数,小数部分就直接扔掉了。最后再除以100.0,把小数点挪回来。简单粗暴,但有效。

精度警告

别忘了,浮点数本身就不是精确的。你以为是0.01,说不定实际是0.00999999。所以别指望这个方法能解决所有问题。对于特别注重精确度的场合,还是建议使用定点数。

替代方案

你也可以用printf来格式化输出,像这样:printf("%.2f", num); 但嵌入式系统里用printf?除非你想让你的代码慢如蜗牛。 还有人用std::setprecision,但是要注意,这玩意儿默认是四舍五入的,而且还会修改数字的显示方法,而不是修改原数字本身。别瞎折腾了。

溢出提示

如果你的数太大了,乘以100可能会溢出。自己小心点,根据实际情况做必要的检查。例如,如果你的double可能超过INT_MAX / 100,那就别用这个方法了。

总结

总而言之,直接截断是最简单、最有效的方法。别想那些花里胡哨的,嵌入式系统不需要。记住,KISS (Keep It Simple, Stupid) 原则永远适用。想了解更多关于 C++保留小数位数 的方法,可以自己去查资料,但别忘了嵌入式的核心是效率。

有些人喜欢用 字符串处理,把浮点数转成字符串再截取。我劝你还是省省吧,嵌入式系统里字符串操作就是性能杀手。除非你闲的没事干,否则别碰。

另外,别指望什么神奇的函数能帮你解决所有问题。C++ 就是 C++,没有那么多花里胡哨的东西。老老实实用最基本的方法,才能保证你的代码在各种平台上都能跑。

参考来源: