C语言-整除截断

在《The C Programming Language》提到整除截断的问题:

…, as in many other languages, integer division truncates: any fractional part is discarded. Since 5 and 9 are integers. 5/9 would be truncated to zero …

简单来说,就是程序中计算5/9时其商为0!

而出现这种情况的原因,就是整除截断了。

参考

What is the behavior of integer division?:

C语言标准:

6.5.5 Multiplicative operators
6 When integers are divided, the result of the / operator is the algebraic quotient with any fractional part discarded.88) If the quotient a/b is representable, the expression (a/b)*b + a%b shall equal a.

相应的脚注是:

88) This is often called ‘truncation toward zero’.

解释

正如《The C Programming Language》中提到的

any fractional part is discarded

在C语言标准中也是说整数除法时,商的小数部分会被忽略。

而其结果满足表达式:

a = (a/b) * b + a%b

其中,a%b:b对a的求模运算,也就是除法的余数。

解决办法

为了避免整除截断,通常采用的办法就是使用浮点数除法代替整除:5 / 9 -->> 5.0 / 9。

此时,由于是浮点数与整数做除法运算,根据默认的类型转换规则,会将整数先转换为浮点数再做除法。因此,其结果也不会被截断了。

P.S. 关于类型转换会在后续的文章中具体讲解。

你可能感兴趣的:(C语言)