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