加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

如何在java中将float转换为double?

发布时间:2020-12-15 02:59:00 所属栏目:Java 来源:网络整理
导读:参见英文答案 Why converting from float to double changes the value?9个 我在java中编写以下代码并检查存储在变量中的值.当我在一个双变量’y’中存储1.2时,它变成了1.200000025443. 为什么不是1.2亿? public class DataTypes{ static public void main(
参见英文答案 > Why converting from float to double changes the value?9个
我在java中编写以下代码并检查存储在变量中的值.当我在一个双变量’y’中存储1.2时,它变成了1.200000025443.
为什么不是1.2亿?
public class DataTypes

{
    static public void main(String[] args)
    {
        float a=1;
        float b=1.2f;
        float c=12e-1f;
        float x=1.2f;
        double y=x;

        System.out.println("float a=1 shows a= "+a+"nfloat b=1.2f shows b= "+b+"nfloat c=12e-1f shows c= "+c+"nfloat x=1.2f shows x= "+x+"ndouble y=x shows y= "+y);
    }
}

你可以在这里看到输出:

float a=1 shows a= 1.0
float b=1.2f shows b= 1.2
float c=12e-1f shows c= 1.2
float x=1.2f shows x= 1.2
double y=x shows y= 1.2000000476837158

解决方法

出现这种问题的原因是因为计算机仅在 discrete mathematics工作,因为微处理器只能表示内部全数,但没有小数.因为我们不仅可以使用这些数字,而且还可以使用小数,以规避这一点,几十年前,非常聪明的工程师发明了浮点表示,标准化为 IEEE754.

IEEE754规范定义了如何在内存中解释浮点数和双精度数.基本上,与表示精确值的int不同,浮点数和双精度数是从以下计算:

>签字
>指数
>分数

所以这里的问题是当你将1.2存储为double时,实际上存储了二进制近似值:

00222221100110011001100110011010

它给出了最接近1.2的表示,可以使用二进制分数存储,但不完全是那个分数.在小数部分中,12 * 10 ^ -1给出精确值,但作为二进制分数,它不能给出精确值.

(参见http://www.h-schmidt.net/FloatConverter/IEEE754.html因为我自己太懒了)

when I store 1.2 in a double variable ‘y’ it becomes 1.200000025443 something

实际上在y和float的两个版本中,实际值都是1.2000000476837158,但由于float的尾数较小,所表示的值在近似之前被截断,使得你认为它是一个精确值,而在内存中不是.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读