C++ 在将其转换为整数时,浮点如何舍入

C++ 在将其转换为整数时,浮点如何舍入,c++,floating-point,integer,C++,Floating Point,Integer,如果我有 (float)value = 10.50 做 int new_value = (int)value 什么规则可以对数字进行四舍五入?规则很简单:数字只是被截断为整数部分,在本例中,被截断为10。小数部分被完全删除。这同样适用于负数:-10.5将转换为-10当转换为整数时,浮点的小数部分被删除,这意味着浮点10.5将转换为整数10,浮点-10.5将转换为整数-10。当浮点类型的有限值转换为整数类型时,小数部分将被丢弃(即,该值被朝零截断) 所以在-10.5的情况下,它被转换为-10

如果我有

(float)value = 10.50

int new_value = (int)value

什么规则可以对数字进行四舍五入?

规则很简单:数字只是被截断为整数部分,在本例中,被截断为
10
。小数部分被完全删除。这同样适用于负数:
-10.5
将转换为
-10
当转换为整数时,浮点的小数部分被删除,这意味着浮点10.5将转换为整数10,浮点-10.5将转换为整数-10。

当浮点类型的有限值转换为整数类型时,小数部分将被丢弃(即,该值被朝零截断)

所以在
-10.5
的情况下,它被转换为
-10

C++11 4.9浮点积分转换[conv.fpint] 浮点类型的右值可以转换为整数类型的右值。转换截断;也就是说,小数部分被丢弃。如果目标类型中无法表示截断的值,则行为未定义。[注:如果目的地类型为bool,请参见4.12.-结束注]


你确定吗?那么-10.5呢?它是向零舍入的,无论数字是正的还是负的,-10.5变成了-10。你是说通过截断删除的浮点数部分是“分数”(但你写了“小数”)。我尝试了一些方法,发现-20.50在整数中是-21-我猜,这并不是简单的截断。。。或者像往常一样,我做错了:)@therainycat有趣。你在哪个站台?我觉得那种行为很奇怪。我希望得到<代码> -20 。我在典当上写,有时用C++编写的文件。典当中没有构造为(int),所以有人制作了include,其中(inc)只是替换为floatround(value,floatround_floor)。所以,我对下面的数字有错误的值0@therainycat对不起,我不知道你在说什么,也不知道这对你的问题有什么影响。虽然你提到的引文中有这样的内容,但我还是会明确地推荐
round
或类似的东西。