String转换double类型精度缺失

长字符串转换double类型时,因为double类型有效数字位(1位整数位+15位小数位),当修改前16位时,精度不丢失。

当修改16位之后的数字时,会出现精度丢失

解决方法,使用BigDecimal

public class test {
    public static void main(String[] args) {
        String varnum1 = "18127154912571512545";
        String varnum2 = "18127154912571512345";
        System.out.println(varnum1);
        System.out.println(varnum2);

        double doublenum1 = Double.parseDouble(varnum1);
        double doublenum2 = Double.parseDouble(varnum2);
        System.out.println(doublenum1);
        System.out.println(doublenum2);
        System.out.println(doublenum1 == doublenum2);

        BigDecimal doublenum3 = BigDecimal.valueOf(Double.valueOf(varnum1));
        BigDecimal doublenum4 = BigDecimal.valueOf(Double.valueOf(varnum2));
        System.out.println(doublenum3);
        System.out.println(doublenum4);
        System.out.println(doublenum3 == doublenum4);

    }
}

输出结果:

Java中,可以使用以下两种方法将String类型转换double类型: 1. 使用Double.parseDouble(String str)方法:这是将String转换double的常用方法。这个方法接受一个表示数字的字符串作为参数,并返回一个对应的double类型的值。如果输入的字符串无法解析为有效的double值,则会抛出NumberFormatException异常。例如: ```java String str = "3.14"; double num = Double.parseDouble(str); System.out.println(num); // 输出: 3.14 ``` 2. 使用Double.valueOf(String str)方法:这个方法与parseDouble()方法类似,也可以将String转换double类型。不同之处在于,valueOf()方法返回一个Double对象,而不是原始的double类型。需要注意的是,如果输入的字符串无法解析为有效的double值,也会抛出NumberFormatException异常。例如: ```java String str = "3.14"; Double num = Double.valueOf(str); System.out.println(num); // 输出: 3.14 ``` 需要注意的是,在进行Stringdouble转换时,要确保输入的字符串表示一个有效的数字。否则,会抛出NumberFormatException异常。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [DoubleString](https://blog.csdn.net/weixin_44057635/article/details/124527703)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值