嵌入式老炮儿教你C++保留两位小数,不四舍五入!
开门见山
想在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++,没有那么多花里胡哨的东西。老老实实用最基本的方法,才能保证你的代码在各种平台上都能跑。