截断双倍而不在C中舍入

时间:2010-03-31 20:30:17

标签: c++ c

让我们考虑一下double R = 99.999999;(可以通过其他一些计算得到),现在所需的输出 99.99

我尝试使用printf("%.2lf",R);,但它正在舍入该值。如何获得所需的输出? (最好使用printf

8 个答案:

答案 0 :(得分:10)

#include <math.h>
...
    printf("%.2f", floor(100 * R) / 100);

答案 1 :(得分:4)

你所要做的就是从数字中减去.005,并且魔术般的printf会按你的意愿行事:总是向下舍入。

答案 2 :(得分:2)

sprintf将它放入缓冲区,然后将NUL char两个字节放过'。'

然后使用中间字符串printf最终字符串。

答案 3 :(得分:2)

如果您拥有它,请使用fmod()来切断double的尾部:

double rounded = R - fmod(R, 0.01);
// Now just print rounded with what you were using before

如果R为正面或负面,则具有相同的优势。

答案 4 :(得分:0)

你可以乘以100,然后截断为整数吗?然后你就可以格式化结果,就像用美元和美分一样。由于浮点表示问题,简单地除以100可能会使您回到正方形。

答案 5 :(得分:0)

使用演员表的另一种解决方案:

...
printf("%.2lf", (double) ((int) (R * 100)) / 100);

答案 6 :(得分:0)

另一种方式,真正签署不可知论者: printf(“%d。%d \ n”,(int)r,abs((int)(r * 100)%100));

答案 7 :(得分:-1)

使用GLibC中的double trunc(double)怎么样?