Java学习日报9.30
**********************************
double类型精度问题
**********************************
1 package test;
2 import java.math.BigDecimal;
3
4 public class TestBigDecimal
5 {
6 public static void main(String[] args)
7 {
8 double v1=0.12;
9 BigDecimal b1 = new BigDecimal(Double.toString(v1));
10
11 BigDecimal f1 = new BigDecimal("0.05");
12 BigDecimal f2 = BigDecimal.valueOf(0.01);
13 BigDecimal f3 = new BigDecimal(0.05);
14 System.out.println("下面使用String作为BigDecimal构造器参数的计算结果:");
15 System.out.println("0.05 + 0.01 = " + f1.add(f2));
16 System.out.println("0.05 - 0.01 = " + f1.subtract(f2));
17 System.out.println("0.05 * 0.01 = " + f1.multiply(f2));
18 System.out.println("0.05 / 0.01 = " + f1.divide(f2));
19 System.out.println("下面使用double作为BigDecimal构造器参数的计算结果:");
20 System.out.println("0.05 + 0.01 = " + f3.add(f2));
21 System.out.println("0.05 - 0.01 = " + f3.subtract(f2));
22 System.out.println("0.05 * 0.01 = " + f3.multiply(f2));
23 System.out.println("0.05 / 0.01 = " + f3.divide(f2));
24 }
25 }

**********************************
转载:https://blog.csdn.net/u011277123/article/details/95774544
float 符号位(1bit) 指数(8 bit) 尾数(23 bit)
double 符号位(1bit) 指数(11 bit) 尾数(52 bit)
float在内存中占8位,由于阶码实际存储的是指数的移码,假设指数的真值是e,阶码为E,则有E=e+(2^n-1 -1)。其中 2^n-1 -1是IEEE754标准规定的指数偏移量,根据这个公式我们可以得到 2^8 -1=127。于是,float的指数范围为-128 +127,而double的指数范围为-1024 +1023。其中负指数决定了浮点数所能表达的绝对值最小的非零数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。
loat的范围为-2^128 ~ +2^127,也即-3.40E+38 ~ +3.40E+38;
double的范围为-2^1024 ~ +2^1023,也即-1.79E+308 ~ +1.79E+308
计算机在处理数据都涉及到数据的转换和各种复杂运算,比如,不同单位换算,不同进制(如二进制十进制)换算等,很多除法运算不能除尽,比如10÷3=3.3333.....无穷无尽,而精度是有限的,3.3333333x3并不等于10,
经过复杂的处理后得到的十进制数据并不精确,精度越高越精确。float和double的精度是由尾数的位数来决定的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。float:2^23 = 8388608,一共七位,
由于最左为1的一位省略了,这意味着最多能表示8位数: 28388608 = 16777216 。有8位有效数字,但绝对能保证的为7位,也即float的精度为7~8位有效数字;double:2^52 = 4503599627370496,一共16位,同理,double的精度为16~17位。

当到达一定值自动开始使用科学计数法,并保留相关精度的有效数字,所以结果是个近似数,并且指数为整数。
在十进制中小数有些是无法完整用二进制表示的。所以只能用有限位来表示,从而在存储时可能就会有误差。
对于十进制的小数转换成二进制采用乘2取整法进行计算,取掉整数部分后,剩下的小数继续乘以2,直到小数部分全为0。
**********************************




因为BigInteger与BigDecimal都是不可变的(immutable)的,在进行每一步运算时,都会产生一个新的对象,所以a.add(b);虽然做了加法操作,但是a并没有保存加操作后的值,正确的用法应该是a=a.add(b);
______________________________________________________
1 package test;
2
3 public class TestWhat {
4
5 public static void main(String[] args) {
6 // TODO 自动生成的方法存根
7 int X=100;
8 int Y=200;
9 System.out.println("X+Y="+X+Y);
10 System.out.println(X+Y+"=X+Y");
11 }
12
13 }



=======================================
明天学会
类的使用!
Java学习日报9.30的更多相关文章
- Java学习日报7.30
package dog;import java.util.*;public class Dog { private String dogName; private String dogColor; p ...
- Java学习日报9.22
/* * 信1905-2班 * 杨传伟 * 2020.9.22 * 20194074 * 账号密码默认 666666 */package atm; import java.util.*;public ...
- Java学习日报10.2
1 package random; 2 import java.util.*; 3 import java.math.*; 4 public class Com { 5 6 public static ...
- Java学习日报10.1
学习内容一 ********************************** 代码 **********************************public class EnumTest ...
- Java学习日报7.8
public class 定义要求文件名和类名保持一致,一个*.Java文件只允许有一个public class定义! 主方法是一切程序的起点, public static void main(Str ...
- Java学习日报 9.29
package random;import java.util.*;import java.math.*;public class Com { public static void main(Stri ...
- Java学习日报8.6
<构建之法:现代软件工程>读后感 比起一般的教学类书籍,这本书更像是一本传记小说,作者邹欣以自己或者说一些典型的软件工程师为例子,详细介绍了一个软件工程师的工作内容,全书给我的感觉就是以一 ...
- Java学习日报7.21
package leap;import java.util.Scanner;public class Leap {public static void main(String args[]) { in ...
- Java学习日报7.7
今天进一步学习了eclipse软件,遇到了几次程序运行不成功的问题,检查之后运行成功!明天继续学习程序逻辑控制!
随机推荐
- 从0开始带你成为JVM实战高手(百度网盘)
狸猫技术窝<从0开始带你成为JVM实战高手> 之前写过几篇 JVM 相关的文章,最近复盘的时候,发现狸猫技术窝<从0开始带你成为JVM实战高手>真的不错,然后就在网上找了一下( ...
- MySQL二进制文件(binlog)
二进制文件(binlog)记录对MySQL数据库执行更改的所有操作,但不包括SELECT和SHOW这类操作,因为这类操作没有改变数据. 为什么会有binlog? 首先 binlog 是 Server ...
- 第10.10节 Python使用__init__.py自动加载包下内容
在前面章节老猿介绍了包下模块及子包的加载的各种方式,并说明包的加载首先是自动加载包下的__init__.py文件.在<第10.6节 Python包的概念>中介绍了__init__.py文件 ...
- 使用kali生成远控payload
kali linux中的metasploit框架是优秀的渗透框架之一,今天记载一下使用kali生成windows远控木马的过程 生成payload使用的工具是MSFVenom,我们输入msfvenom ...
- ES6新特性之箭头函数与function的区别
写法不同 // function的写法 function fn(a, b){ return a+b; } // 箭头函数的写法 let foo = (a, b) =>{ return a + b ...
- Day1-7【Scrum 冲刺博客集合】
Day1-Day7博客链接 Day1[Scrum 冲刺博客] Day2[Scrum 冲刺博客] Day3[Scrum 冲刺博客] Day4[Scrum 冲刺博客] Day5[Scrum 冲刺博客] D ...
- jxl导出excel小demo
1.首先在pom文件加入jar包 <dependency> <groupId>net.sourceforge.jexcelapi</groupId> <art ...
- Java并发编程的艺术(三)——synchronized
什么是synchronized synchronized可以保证某个代码块或者方法被一个线程占有,保证了一个线程的可先性.java 1.6之前是重量级锁,在1.6进行了各种优化,就不那么重了,并引入了 ...
- mysql创建表分区
MySQL创建表分区 create table erp_bill_index( id int primary key auto_increment, addtime datetime ); inser ...
- 【震惊】padding-top的百分比值参考对象竟是父级元素的宽度
引言 书写页面样式与布局是前端工程师Coding 中必不可少的一项工作,在定义页面元素的样式时,padding 属性也是经常被使用到的. padding 属性用于设置元素的内边距,其值可以是lengt ...