- 论坛徽章:
- 0
|
- static void
- fmt_num(long long b, char *strbuf, int sz)
- {
- double bytes;
- bytes = (double)b;
- if (bytes <= (1 << 10)) {
- snprintf(strbuf, sz, "%lld", b);
- } else if (bytes <= (1 << 20)) {
- snprintf(strbuf, sz, "%.3lf K", bytes / 1000);
- } else if (bytes <= (1 << 30)) {
- snprintf(strbuf, sz, "%.3lf M", bytes / (1000 * 1000));
- } else {
- snprintf(strbuf, sz, "%.3lf G", bytes/ (1000 * 1000 * 1000));
- }
- }
复制代码
代码是有问题的,在i386上跑看上去没问题,但是在ppc上跑一下就看出结果不是预期的。
为啥恁? 先囧一下自己的低级错误, 简单的说 double 与 int 不能直接比较,而应该是
- if (bytes <= (double)(1 << 10))
复制代码
请教了个哥们,double 与 int 直接比较属于标准未定义行为,检讨下自己基础不牢。
用double/float不多的同学们注意不要犯同样的错误了  |
|