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

Java中double乘1000输出科学计数法而非预期格式的问题

解决Java数值输出科学计数法及自定义千位分隔符问题

你的代码计算逻辑是正确的,输出科学计数法和"未按预期右移小数位"都是输出格式问题,和使用float/double类型无关——当double数值超过一定范围时,System.out.println默认会用科学计数法展示,而计算结果本身是正确的:125000/(1-0.035)*1000确实等于129533678.7564766。

要实现你想要的带自定义千位分隔符的格式,直接用Java的DecimalFormat类即可,以下是两种方案:

方案1:普通三位千位分隔符(通用格式)

如果需要常规的三位一组分隔(如129,533,678.7564766),代码修改如下:

package test;

import java.text.DecimalFormat;

public class mulcheck {

    public static void main(String[] args) {
        double output = (125000 / (1 - 0.035));
        double finout = output * 1000;
        // 配置格式:三位千位分隔符,保留7位小数
        DecimalFormat df = new DecimalFormat("#,###.0000000");
        System.out.println(df.format(finout));
    }
}

方案2:自定义两位分组(匹配你的预期格式)

如果需要你指定的12,95,33,678.7564766这种从右往左先三位、再每两位分组的格式,需要自定义分组规则:

package test;

import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;

public class mulcheck {

    public static void main(String[] args) {
        double output = (125000 / (1 - 0.035));
        double finout = output * 1000;
        
        DecimalFormatSymbols symbols = new DecimalFormatSymbols();
        symbols.setGroupingSeparator(',');
        // 格式规则:整数部分从右到左,最后三位一组,前面每两位一组,保留7位小数
        DecimalFormat df = new DecimalFormat("#,##,##,##0.0000000", symbols);
        System.out.println(df.format(finout));
    }
}

关键说明

  • DecimalFormat的模式字符串中,#表示可选数字,0表示必须存在的数字;.0000000强制保留7位小数。
  • 分组分隔符通过DecimalFormatSymbols设置,确保使用逗号作为分隔符。
  • 不需要切换float类型,double的精度完全满足你的计算需求,问题核心是输出格式化而非数值计算。

内容的提问来源于stack exchange,提问作者hachi__man

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 08:55:12