gpt4 book ai didi

java - 将 float 转换为 double 而不会丢失精度

转载 作者:IT老高 更新时间:2023-10-28 11:35:39 25 4
gpt4 key购买 nike

我有一个原始 float ,我需要一个原始 double 。简单地将 float 转换为 double 会给我带来奇怪的额外精度。例如:

float temp = 14009.35F;
System.out.println(Float.toString(temp)); // Prints 14009.35
System.out.println(Double.toString((double)temp)); // Prints 14009.349609375

但是,如果我不进行强制转换,而是将 float 输出为字符串,并将字符串解析为 double ,我会得到我想要的:

System.out.println(Double.toString(Double.parseDouble(Float.toString(temp))));
// Prints 14009.35

有没有更好的方法而不是去字符串然后返回?

最佳答案

并不是说您实际上获得了额外的精度 - 而是 float 没有准确地表示您最初瞄准的数字。 double is 准确地代表了原来的 float ; toString 正在显示已经存在的“额外”数据。

例如(这些数字不正确,我只是在编造)假设你有:

float f = 0.1F;
double d = f;

那么 f 的值可能正好是 0.100000234523。 d 将具有完全相同的值,但是当您将其转换为字符串时,它会“相信”它的精确度更高,因此不会提前四舍五入,您会看到已经存在但对您隐藏的“额外数字”。

当您转换为字符串并返回时,您最终会得到一个比原始 float 更接近字符串值的 double 值 - 但这只是 如果 你真的相信字符串值是您真正想要的。

您确定 float/double 是此处使用的合适类型,而不是 BigDecimal?如果您尝试使用具有精确十进制值的数字(例如货币),那么 BigDecimal 是更合适的 IMO 类型。

关于java - 将 float 转换为 double 而不会丢失精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/916081/

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