我想用 java 将以下数字格式化为它们旁边的数字:
1000 to 1k
5821 to 5.8k
10500 to 10k
101800 to 101k
2000000 to 2m
7800000 to 7.8m
92150000 to 92m
123200000 to 123m
右边的数字将是长整数或整数,左边的数字将是字符串。我应该如何处理这个问题。我已经为此做了很少的算法,但我认为可能已经发明了一些可以做得更好的东西,如果我开始处理数十亿和数万亿,则不需要额外的测试:)
其他要求:
- 格式最多应包含 4 个字符
- 以上表示 1.1k 可以,11.2k 不行。同样 7.8m 可以,19.1m 不行。只允许小数点前一位有小数点。小数点前两位表示小数点后没有数字。
- 不需要四舍五入。 (显示的带有 k 和 m 的数字更多的是表示近似值的模拟量表,而不是精确的逻辑文章。因此,四舍五入是无关紧要的,主要是由于变量的性质,即使您正在查看缓存的结果,也可以增加或减少几位数字。)
原文由 MatBanik 发布,翻译遵循 CC BY-SA 4.0 许可协议
这是 一个适用于任何长值的解决方案, 我发现它非常可读(核心逻辑在
format
方法的底部三行中完成)。它利用
TreeMap
找到合适的后缀。它比我以前使用数组编写的解决方案效率更高,而且更难阅读。测试代码