【发布时间】:2015-12-06 19:36:40
【问题描述】:
我在 JTable 中输入数字。如果我输入的数字太长,它将被省略号截断。我想覆盖此行为,以便对数字进行格式化,以便它们适合单元格。这将涉及将某些数字放入科学记数法中。我也不想要前导零或尾随零;如果数字不是单元格的整个宽度,则可以接受。
String#substring(int, int) 不起作用,因为它不适用于科学记数法,或者会丢失信息 0.0000000000000001 会变成 0 而不是 1e-16。
%g 格式的String#format(String, Object...) 不起作用,因为它会留下尾随/前导零,并且在数字计数中不包括科学记数法。
我也查看了DecimalFormat,但找不到任何允许设置字符数的内容。
预期行为的几个示例(最大字符数为 11):
3 -> 3
0.0000000000000001 -> 1e-16
1234567891011121314 -> 1.234568e18
3.1415926535897932384626433832 -> 3.141592654
0.00010001000100010001 -> 0.00010001
我怎样才能做到这一点?
提前致谢!
【问题讨论】:
-
为什么
0.00010001不能写成1.0001e-4?科学记数法你要几位数? -
@Tunaki 请原谅我的歧义;我想用尽可能多的信息来表达数字。
1.0001e-4的信息比0.00010001少。 -
怎么样?是同一个号码,没有丢失信息
-
Here is an excellent post about this。我会发布一个受其启发的答案。
-
@Tunaki 抱歉,用户在读取值时可用的信息较少,