gpt4 book ai didi

java - String to float/double 解析

转载 作者:行者123 更新时间:2023-11-30 06:09:45 26 4
gpt4 key购买 nike

当我尝试将以下字符串解析为 float 和 double 时:

String abc = "8.40";
System.out.println("Double Value: " + Double.parseDouble(abc) * 100);
System.out.println("Float Value: " + Float.parseFloat(abc) * 100);

我得到两个不同的结果。

Double Value: 840.0
Float Value: 839.99994

但是当我尝试将 float 和 double 乘以 10 或 1000 的相同代码时,我得到了两者相似的结果。

String abc = "8.40";
System.out.println("Double Value: " + Double.parseDouble(abc) * 10);
System.out.println("Float Value: " + Float.parseFloat(abc) * 10);

我得到两个相似的结果。

Double Value: 84.0
Float Value: 84.0

当我尝试这个时:

String abc = "8.40";
System.out.println("Double Value: " + Double.parseDouble(abc) * 1000);
System.out.println("Float Value: " + Float.parseFloat(abc) * 1000);

我得到两个相似的结果。

Double Value: 8400.0
Float Value: 8400.0

最佳答案

这会很好地工作:

System.out.println("Float Value: "+Math.round((float)Float.parseFloat(abc)*100));

所以,发生这种情况是因为 doublefloat 的不同表示,或者更准确地说,关于 float 的 IEEE-754 舍入。了解一下 here .

float 具有较小的范围和精度,因此 double 在您有内存时会更好(今天您这样做)。 但是,他们都是邪恶的! Java 中有一个更好的选项,叫做 BigDecimal,你应该使用它,因为它没有大小问题,而且今天我们有强大的计算机,所以我们在处理时不会有内存和速度问题需要最大精度的大量小数。例如,如果您在处理大量货币交易的软件上工作,则必须使用 BigDecimal

关于java - String to float/double 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37316984/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com