Java 使用最大字符数格式化数字

Java 使用最大字符数格式化数字,java,number-formatting,Java,Number Formatting,我把数字放在一个表格里。如果我输入一个太长的数字,它会用省略号截断。我希望覆盖此行为,以便对数字进行格式化,使其适合单元格。这将涉及将某些数字放入科学记数法。我也不想要前导或尾随的零;如果数字不是单元格的整个宽度,则可以接受 不起作用,因为这不适用于科学记数法或会丢失信息。0.000000000000000 1将变成0,而不是1e-16 对于%g格式不起作用,因为它会留下尾随/前导零,并且在数字计数中不包含科学符号 我也查看了,但找不到任何允许设置字符数的内容 预期行为的几个示例(最大字符数为1

我把数字放在一个表格里。如果我输入一个太长的数字,它会用省略号截断。我希望覆盖此行为,以便对数字进行格式化,使其适合单元格。这将涉及将某些数字放入科学记数法。我也不想要前导或尾随的零;如果数字不是单元格的整个宽度,则可以接受

不起作用,因为这不适用于科学记数法或会丢失信息。
0.000000000000000 1
将变成
0
,而不是
1e-16

对于
%g
格式不起作用,因为它会留下尾随/前导零,并且在数字计数中不包含科学符号

我也查看了,但找不到任何允许设置字符数的内容

预期行为的几个示例(最大字符数为11):

我怎样才能做到这一点


提前谢谢

这可以帮助你,它的灵感来自我在评论中链接的帖子。这将格式化字符串并删除前导零

主要
为什么不写入
0.00010001
1.0001e-4
?你想要多少位数的科学符号?@Tunaki请原谅我的歧义;我想用尽可能多的信息来表达数字
1.0001e-4
的信息比
0.00010001
的少。这是怎么回事?是同一个号码,没有丢失的信息。我将发布一个受启发的答案。@Tunaki抱歉,用户在读取值时可用的信息较少,看起来不错。。。但是
100000e-15
仍然有尾随的零,并且
314159e+00
应该使用标准符号。我可以做一些正则表达式的东西,然后再加上数字;有更好的方法吗?@ricky3350是的,我认为稍微修改一下方法是可能的。我会检查我能做什么。
3 -> 3
0.0000000000000001 -> 1e-16
1234567891011121314 -> 1.234568e18
3.1415926535897932384626433832 -> 3.141592654
0.00010001000100010001 -> 0.00010001
String[] nums = {"000000003","0.000000000000001","1234567891011121314","3.1415926535897932384626433832","0.00010001000100010001"};
for (int i = 0 ; i < nums.length ; i++){
    System.out.println(format(nums[i].replaceAll("^0*", "")));
}
public static String format(String s){
    if (s.length() <= 11) return s;
    return String.format("%6.5e", Double.valueOf(s));
}
3
1,00000e-15
1,23457e+18
3,14159e+00
1,00010e-04