Java Double 避免科学计数法

该博客探讨了在Java中如何使用DecimalFormat进行数值格式化,以及如何利用BigDecimal来处理高精度浮点数,避免精度损失。示例代码展示了double类型与BigDecimal类型的转换和打印,展示了不同精度的表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码

package com.me.basic;

import java.math.BigDecimal;
import java.text.DecimalFormat;

public class ScientificCounting {

    public static void main(String[] args) {
        funcOne();
        System.out.println("============");
        funcTwo();
    }

    public static void funcOne(){
        Double double1 = 12345678966.123456789;
        //格式化设置
        DecimalFormat decimalFormat = new DecimalFormat("#,##0.00");
        System.out.println(decimalFormat.format(double1));
        System.out.println(double1);
    }


    public static void funcTwo(){
        Double dd = 12345678966.123456789;
        BigDecimal bigDecimal = new BigDecimal(dd.toString());
        System.out.println(bigDecimal);
        System.out.println(dd);
    }


}

运行结果

12,345,678,966.12
1.2345678966123457E10
============
12345678966.123457
1.2345678966123457E10
Java 中,当你使用 `Double.parseDouble` 解析字符串到双精度浮点数值时,默认情况下如果数字非常大或非常小,则会采用科学记数法表示结果。为了避免这种情况并始终获得常规的十进制形式输出,你可以采取以下几种策略: ### 使用 DecimalFormat 格式化 虽然这不是直接解决解析过程的问题,但在显示数据前可以先将其转换为你需要的形式。 ```java import java.text.DecimalFormat; public class Main { public static void main(String[] args) { String str = "1.2E-5"; Double d = Double.parseDouble(str); // 创建一个DecimalFormat对象,并指定格式模式 DecimalFormat df = new DecimalFormat("#"); System.out.println(df.format(d)); // 输出:0 } } ``` 注意上述示例为了简化演示采用了"#"作为占位符,在实际应用中你需要调整格式模板来满足具体的精度需求,例如 `"#.##########"` 可以保留较多的小数部分有效位。 ### 自定义处理逻辑 如果你确实希望从一开始就防止科学记数法进入系统内部(比如通过严格的输入验证),那么可以在接受用户输入之后、调用 `parseDouble()` 之前检查原始文本是否包含 'e' 或者'E' 来判断是否存在指数表达式,并针对这种情形做特殊处理如报错提示等操作。 另外一种思路是在将最终结果显示给用户之前再考虑如何展示它而不是试图改变底层存储机制——即保持 `double` 类型变量本身的值不变而仅修改其对外呈现样式。 不过需要注意的是,对于极大的数或是极小的正负接近于零的数据来说,科学记数法本身就是计算机内存有限条件下的高效解决方案之一;因此除非有明确业务场景要求避免这种方式,通常不必过分纠结于此细节之上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值