在C中使用两个正双精度的余数将其变为负数?

  • 本文关键字:余数 双精度 两个 c modulo
  • 更新时间 :
  • 英文 :


我刚开始学习C编程,但是每当我运行这个:

double a = 9.92; 
double b = 2.00;
printf("%.2lf,  %.2lf,  %.2lf", a, b, remainder(a, b));

输出总是$-0.18。我希望的输出是$1.92。

余数函数将除法的结果舍入到最接近的整数,这意味着您可以得到一个负的结果。从手册页:

remainder()函数计算x除以的余数y。返回值为x-n*y,其中n为值x / y,四舍五入到最接近的整数。如果x-n*y的绝对值为0.5,则选择n为偶数

因此,给定您的输入,9.92 / 2的结果是4.96,四舍五入到最接近的整数是5。然后是9.92 - (5 * 2.00)==9.92 - 10.0==-0.08

您希望使用fmod,它将除法舍入到0。手册页说明:

fmod()函数计算浮点余数x除以y。返回值为x - n * y,其中nx / y的商,向零四舍五入为整数。

最新更新