You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

为何浮点基本类型与10的特定倍数运算后显示为科学计数法?

Java浮点类型输出科学计数法的原因解析

这其实是Java里floatdouble类型转成字符串时的默认规则导致的,咱们一步步说清楚:

当你执行System.out.println(num2)的时候,底层会调用Float.toString(float)方法,这个方法内置了一套显示逻辑:

  • 如果数值的绝对值小于0.001(也就是10⁻³),或者绝对值大于等于1000000(也就是10⁶),就会自动切换成科学计数法来输出。

你的例子里,5 / 10000f计算结果是0.0005,刚好小于0.001,所以触发了科学计数法的显示规则,输出5.0E-4(其实和0.0005数值完全相等,只是表示方式不同)。

咱们可以做个对比验证:

int num1 = 5;
float num2 = num1 / 1000f; // 结果是0.005,大于等于0.001
System.out.println(num2); // 输出0.005,不会用科学计数法

如果想要强制用普通十进制格式输出,完全可以通过DecimalFormat来定制显示样式:

import java.text.DecimalFormat;

public class FloatFormatDemo {
    public static void main(String[] args) {
        int num1 = 5;
        float num2 = num1 / 10000f;
        // 定义格式,保留四位小数
        DecimalFormat decimalFormat = new DecimalFormat("0.0000");
        System.out.println(decimalFormat.format(num2)); // 输出0.0005
    }
}

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

火山引擎 最新活动