printf有符号整数和小数点,带负号的问题

时间:2014-05-12 11:14:53

标签: c printf

dsPIC33,XC16编译器。

dat1标记为INT16,其值为16434,-16434打印到164.34和-164.34。

printf("---: +/-180 from North   %d.%02d (deg)\n",(dat1/100),(dat1%100));

对于dat1 = 164.34,我得到了

---: +/-180 from North -164.34 (deg)

当dat1 = -164.34时,我得到了

---: +/-180 from North -164.-34 (deg)

==>如何摆脱'-.34'的减号?

1 个答案:

答案 0 :(得分:1)

你的陈述几乎是正确的,除非你想摆脱第二个号码的标志。您可以使用此声明。

printf("---: +/-180 from North   %d.%02d (deg)\n", dat1/100, abs(dat1)%100);

编辑: 感谢@chux。

上述代码的工作范围为-180.00到180.0度。当您需要更通用的方法时,您应该在调用abs()之前移动模运算。

推迟abs()可避免INT_MIN出现问题,因为abs(INT_MIN)可能会产生意外结果。那么代码应该是:

printf("---: +/-180 from North   %d.%02d (deg)\n", dat1 / 100, abs(dat1 % 100));