对于一个简单的项目,我必须使大数字(例如 4294967123)可读,所以我只写带前缀的第一个数字(4294967123 -> 4.29G、12345 -> 12.34K 等)
代码(简化)如下所示:
const char* postfixes=" KMGT";
char postfix(unsigned int x)
{
return postfixes[(int) floor(log10(x))];
}
它有效,但我认为有一个更优雅/更好的解决方案,而不是计算完整的精度对数,将其四舍五入并再次将其转换为 int。
我想到的其他解决方案:
int i=0;
for(; x >= 1000 ; ++i) x/=1000;
return postfixes[i];
(这要慢得多,但更容易阅读)
这些数字根据本福德定律分布,并且该数字应被视为无符号 64 位数字,因为在 10^x 附近不应存在舍入误差(例如,在 python 中math.log(1000,10)
返回 2.999996,它被限制为 2)。有没有我想念的快速、准确的其他方式?