纯原创:Java中的float和double的有效数字的位数问题,记不住,代码show,二进制解释随其后! | 您所在的位置:网站首页 › float和double精确到小数点后几位 › 纯原创:Java中的float和double的有效数字的位数问题,记不住,代码show,二进制解释随其后! |
今天,陈老师和老王讨论一个问题,记下来和大家分享一下,有需要的同学,可以一起复习一下。 1,首先是程序的调试观念。这个是重要的,学习任何一门语言,语法只能服从,老王建议熟能生巧,不要记忆或者背,因为这个东西很多时候是不可靠的,尤其是刚开始接触多门语言的时候,会出现很不适应的情况。因此,搞不清楚的时候,直接代码show结果,比任何书都有用!(这也是老王之前表达的很多书不合格的原因,有时候相互矛盾,学生无所适从)。学计算机的孩子们,要学习硅谷的叛逆精神,不要尽信书(此处经典大神级教材在学习初期还是要信的,之后你有了质疑的能力,也许就发现了好问题),发现书中的错误,是老王年轻时候的一个乐趣,现在也会,但琐事原因导致读书少了很多,惭愧。 2,不多说理论,需要的搜索即可。 关于float和double的有效数字问题,老王本以为没啥问题了,感谢陈老师的求实精神,老王受教了。所谓float的8位,double的16位(也有7位和15位的说法),大家不必强记,代码走一遍就了解了。 class Noname1 { public static void main(String[] args) { float f1=12.1234561f;//9位 float f2=12.1234565f;//最后一位为了检验四舍五入用 float f3=12.1234570f;//最后一位写成0,不会显示出来 double d1=123456.12345678902;//17位 double d2=123456.12345678906;//最后一位为了检验四舍五入用 double d3=123456.12345678909;//最后一位为了检验四舍五入用 double d4=123456.12345678910;//最后一位写成0,不会显示出来 System.out.println("f1="+f1); System.out.println("f2="+f2); System.out.println("f3="+f3); System.out.println("zhuan="+(float)d1);//测试double转float System.out.println("d1="+d1); System.out.println("d2="+d2); System.out.println("d3="+d3); System.out.println("d4="+d4); } }
至于此处显示的第17位,仅仅是因为其在理论范围内的值。为了进一步测试,换了几个数值。如下图(没错!086正常显示17位,087就进位了16位。这个是有效数字玩我吗?是传说中的系统问题吗?有兴趣的看下一点即可) double转float: 123456.12345678902二进制 11110001001000000.000111111001101011011101001101110101 取23位:11110001001000000.000111(111001101011011101001101110101) 进位取11110001001000000.001000 转十进制123456.125 double显示(主要解释086不进位,087进位即可) 123456.123456789086 二进制:11110001001000000.000111111001101011011101001101111001 取53位:17+36位,整好53位 所以保留后转十进制,还是123456.12345678908(显示17位) 附上转换工具 |
今日新闻 |
推荐新闻 |
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 |