如何在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?

【问题讨论】:

你能解释一下你的格式吗?也许最后一行应该是 riead 35|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中自定义格式数字?的主要内容,如果未能解决你的问题,请参考以下文章

数据绑定期间如何在datagridview中自定义格式数据

如何使用JS在HTML中自定义字符串格式化

scratch中自定义模块的数字或文本有啥用

如何在 Java 中自定义排序列表

如何使用excel中自定义的单词将自定义单元格转换为值

在 Java 中自定义默认 AbstractColorChooserPanel