我有两个long long(int)值,我想以3位精度打印浮点格式的除法。我已经读过了
printf and long double,但所有这些建议都会导致nan
作为printf的结果。
E.g。
long long a = 123123123;
long long b = 123123124;
printf("%d\n", b/a);
printf("%.3f", b/a);
第一次打印将输出1
(按预期方式),但第二次0.000
代替1.xxx
答案 0 :(得分:1)
除了第一个,printf
不检查传递的参数或字符串的格式化参数的数量与参数(大多数编译器可以警告你有关问题,但是不保证)
b/a
是long long
类型。
因此,即使第一种printf
类型有效,
printf("%lld\n", b/a);
第二个printf
根本不起作用,因为参数被解释为double
,但未转换(尽管传递float
也可行:How does printf and co differentiate beetween float and double ),由于printf
函数的varadic性质(你几乎可以将任何东西作为参数传递,因此它不安全)。您必须明确地将其转换为double
,例如:
printf("%.3f", (double)b/a);
请注意,(double)(b/a)
也可以使用,但是您会丢失小数部分