Java Swing中使用g.drawString输出数字避免科学计数法问题
解决Java Swing中drawString输出大数字时的科学计数法问题
这情况我太熟了!当你直接把double类型的大数值转成字符串时(比如"" + TOC),Java的默认规则会在数值超过一定阈值(绝对值≥107或≤10-3)时自动切换成科学计数法显示,你的TOC=14214111刚好踩中了这个阈值,所以才会出现带E的格式。
给你几个实用的解决办法:
方法1:用String.format强制格式化(最简便)
直接用String.format()指定输出为普通整数格式,保留0位小数即可:
protected void paintComponent ( Graphics g ) { super.paintComponent ( g ); g.setFont(f); // 替换原来的"" + TOC,用%.0f强制输出整数形式 g.drawString(String.format("%.0f", TOC), 280, 34); repaint(); }
%.0f表示将浮点数格式化为不带小数位的字符串,完全规避科学计数法。
方法2:用DecimalFormat实现更灵活的格式化
如果后续需要调整格式(比如加千位分隔符),可以用DecimalFormat:
首先在类中定义格式化器(建议设为静态常量,避免重复创建):
static double TOC=14214111; private static final DecimalFormat decimalFormat = new DecimalFormat("#"); // #表示匹配整数位 .....
然后在paintComponent中使用:
g.drawString(decimalFormat.format(TOC), 280, 34);
方法3:直接改用整数类型(根源解决)
既然你的TOC是整数,完全可以把它的类型从double改成long:
static long TOC=14214111L; // 注意末尾加L表示长整型
这样直接用"" + TOC转字符串时,就会输出正常的数字格式,不会触发科学计数法逻辑。
内容的提问来源于stack exchange,提问作者Kappa Coder
相关产品推荐
相关产品推荐

