当对 double 值执行 std::ceil
时,该值将四舍五入为整数。所以3.3会变成4.0。可以转换或截断为 int
。这将“切断”逗号后的部分。所以:
int foo = (int)std::ceil(3.3);
所以乍一看,这会将 4 存储在 foo 中。但是,double 是一个浮点值。所以它可能是 4.000000001
或 3.999999999
。后者将被截断为 3。
但实际上我从未见过这种行为发生。我可以安全地假设任何实现都会返回 4 吗?还是只有 IEEE-754
执行此操作。还是我只是运气好?
最佳答案
四舍五入(或上限) double 将始终、始终、始终准确。
对于2^(m+1)以下的 float ,其中m是尾数位数,所有整数都有精确表示,所以可以精确表示结果。
对于大于 2^(m+1) 的 float ...它们已经是整数。如果您考虑一下,这是有道理的:没有足够的尾数位来向下延伸到小数点的右边。所以再次舍入/上限是准确的。
关于c++ - 截断并转换为 ceiled double 的 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31263213/