我在JTable中输入数字。如果我输入一个太长的数字,它将用省略号截断。我想覆盖这种行为,以便格式化数字,使它们适合单元格。这将涉及将某些数字纳入科学记数法。我也不想要领先或尾随的零;如果数字不是单元格的整个宽度,则可以接受。
String#substring(int, int)
不起作用,因为这不适用于科学记数法,或者会丢失信息// print all numbers with n digits
public static void printBinaryNumber(int n){
// print all numbers with n digits recursively adding ""
printBinaryNumbersRec("", n);
}
public static void printBinaryNumbersRec(String s, int n){
if(n < 0) throw new IllegalArgumentException();
if(n == 0) {
// if I should print all numbers with 0 digits and add s before them
// I just print s and am done
System.out.println(s);
return;
}
// add an additional 0 to s and print all numbers with n-1 digits
printBinaryNumbersRec(s + "0", n-1);
// add an additional 1 to s and print all numbers with n-1 digits
printBinaryNumbersRec(s + "1", n-1);
}
将变为0.0000000000000001
而不会0
。
1e-16
格式的 String#format(String, Object...)
不起作用,因为它会留下尾随/前导零,并且不包括数字计数中的科学记数法。
我也看了DecimalFormat
,但找不到任何允许设置字符数的内容。
预期行为的一些示例(最大字符数为11):
%g
我怎么能做到这一点?
提前致谢!
答案 0 :(得分:1)
这可以帮到你,它的灵感来自我在评论中链接的帖子。这将格式化String并删除前导零。
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