You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:12:03