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