Python 和 C++ 中的舍入问题
在 Python 和 C++ 中,**int 强制转换(或构造函数)采用的是“截断取整”(Truncate),即直接丢弃小数部分,保留整数部分,不进行四舍五入**,向0舍入。
Python 中的 int() 强制转换
- 行为:直接截断小数部分(向零取整)。
- 示例:
1
2print(int(3.7))# 输出: 3(直接丢弃 0.7)
print(int(-2.9))# 输出: -2(直接丢弃 -0.9,不是 -3!) - 关键点:
- 对正数相当于向下取整(
floor),但对负数相当于向上取整(ceil),本质是向零靠近。 - 与
math.trunc()行为完全一致:1
2import math
print(math.trunc(3.5))
对比总结
cmath库
| 方法 | Python | C++ |
|---|---|---|
| 向下取整 | math.floor(x) |
std::floor(x) |
| 向上取整 | math.ceil(x) |
std::ceil(x) |
| 四舍五入 | round(x) |
std::round(x) |
| 截断取整 | math.trunc(x)或int(x) |
std::trunc(x) |
- Python的
round()函数在遇到.5时会向最近的偶数取整(银行家舍入法),而C++的std::round()会远离零。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Min的博客!
评论
