如何在java中自定义格式数字?
Posted
技术标签:
【中文标题】如何在java中自定义格式数字?【英文标题】:How to custom format a number in java? 【发布时间】:2012-07-25 08:20:06 【问题描述】:我有一个用户 25|35|40
输入的字符串。我已将100=25+35+40
以下的任何数字格式化为这种格式。例如,
5 --> 05|00|00
30 --> 25|05|00
65 --> 25|35|05
应保持 25|35|40 的顺序。这类似于日期格式 MM:dd:yyyy,因为我们知道月份不能超过 12 并且日期不能超过 31。但是这里可以出现任何值。其位置的值确定最大值。另一个例子,
如果用户字符串是40|110|2500|350
5 --> 05|000|0000|000
100 --> 40|060|0000|000
450 --> 40|110|0300|000
2900 --> 40|110|2500|250
如果数量超过3000=40+110+2500+350
的总数,我可以将其设为number -= 3000
。
目前我正在尝试使用自定义代码对其进行格式化,该代码将检查数字并创建所需的输出字符串。 java中有没有内置的格式API?
【问题讨论】:
你能解释一下你的格式吗?也许最后一行应该是 riead35|25|05
?
似乎是一个非常具体的商业案例......看不到任何 API 为 % 和 - 并且字符串连接足以完成这项工作。为什么要这样格式化,说不定能帮我们找个工具呢。
您能否详细说明您是如何从 30/65 得到这三个数字的?
顺便说一句,您可以创建自己的NumberFormat
来将您的业务封装在此 API 中。
【参考方案1】:
没有针对此类特定用例的公共 API。这是解决它的一种方法:
int num = 65;
int i1 = num > 25 ? 25 : num;
int i2 = num < 25 ? 0 : num > 60 ? 35 : num - 25;
int i3 = num < 60 ? 0 : num - 60;
System.out.format("%02d|%02d|%02d", i1, i2, i3);
打印
25|35|05
或者,概括一下:
public static String format(String format, int num)
String[] split = format.split("\\|");
int numLeft = num;
StringBuilder result = new StringBuilder();
for (int i = 0; i < split.length; i++)
int boundary = Integer.parseInt(split[i]);
int number = Math.min(numLeft, boundary);
if (result.length() > 0)
result.append('|');
result.append(leftPad(number, split[i].length()));
numLeft = Math.max(0, numLeft - boundary);
return result.toString();
private static String leftPad(int number, int length)
StringBuilder sb = new StringBuilder();
sb.append(number);
while (sb.length() < length)
sb.insert(0, '0');
return sb.toString();
public static void main(String[] args)
String result = format("25|35|40", 65);
System.out.println(result);
【讨论】:
谢谢!但这仅限于三个段和两个小数格式。 @Ahamed:是的,没有看到更新的要求。现在它适用于您指定的任何格式。 如果一个段有超过两位数怎么办? :( 我已经采纳了你之前的回答。刚刚修改了%02d
中的2
关于段长度。谢谢你的时间!!!以上是关于如何在java中自定义格式数字?的主要内容,如果未能解决你的问题,请参考以下文章