**********************************

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的更多相关文章

  1. Java学习日报7.30

    package dog;import java.util.*;public class Dog { private String dogName; private String dogColor; p ...

  2. Java学习日报9.22

    /* * 信1905-2班 * 杨传伟 * 2020.9.22 * 20194074 * 账号密码默认 666666 */package atm; import java.util.*;public ...

  3. Java学习日报10.2

    1 package random; 2 import java.util.*; 3 import java.math.*; 4 public class Com { 5 6 public static ...

  4. Java学习日报10.1

    学习内容一 ********************************** 代码 **********************************public class EnumTest ...

  5. Java学习日报7.8

    public class 定义要求文件名和类名保持一致,一个*.Java文件只允许有一个public class定义! 主方法是一切程序的起点, public static void main(Str ...

  6. Java学习日报 9.29

    package random;import java.util.*;import java.math.*;public class Com { public static void main(Stri ...

  7. Java学习日报8.6

    <构建之法:现代软件工程>读后感 比起一般的教学类书籍,这本书更像是一本传记小说,作者邹欣以自己或者说一些典型的软件工程师为例子,详细介绍了一个软件工程师的工作内容,全书给我的感觉就是以一 ...

  8. Java学习日报7.21

    package leap;import java.util.Scanner;public class Leap {public static void main(String args[]) { in ...

  9. Java学习日报7.7

    今天进一步学习了eclipse软件,遇到了几次程序运行不成功的问题,检查之后运行成功!明天继续学习程序逻辑控制!

随机推荐

  1. 老猿学5G:融合计费场景的离线计费会话的Nchf_OfflineOnlyCharging_Create创建操作

    ☞ ░ 前往老猿Python博文目录 ░ 一.Nchf_OfflineOnlyCharging_Create消息交互流程 Nchf_OfflineOnlyCharging_Create服务化操作请求是 ...

  2. 第9.12节 Python中其他文件操作方式

    一. 引言 本章老猿主要介绍了Python 内置io模块的文件操作相关功能,其实除了内置io模块可以进行文件操作外,Python的不同模块还提供了多种文件操作方式,下面简单将这些模块和方法介绍一下. ...

  3. c++如何按照map的value进行排序?

    static bool cmp(pair<char, int> a , pair<char,int> b) { return a.second>b.second; //按 ...

  4. c++11-17 模板核心知识(十五)—— 解析模板之依赖型类型名称与typename Dependent Names of Types

    模板名称的问题及解决 typename规则 C++20 typename 上篇文章c++11-17 模板核心知识(十四)-- 解析模板之依赖型模板名称 Dependent Names of Templ ...

  5. mybatis-generator 插件用法

    xml 配置 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE generatorCo ...

  6. 【Home Page】本博客使用指南

    [关于] 坐标:ZJ.HZ.XJ. 高一现役 OIer,经常被吊打. Luogu:_Wallace_ [近期] 浙大 ICPC-ACM 2020 部分题解: 关键字「ZJU-ICPC Summer T ...

  7. 算法(图论)——最小生成树及其题目应用(prim和Kruskal算法实现)

    题目 n个村庄间架设通信线路,每个村庄间的距离不同,如何架设最节省开销? Kruskal算法 特点 适用于稀疏图,时间复杂度 是nlogn的. 核心思想 从小到大选取不会产生环的边. 代码实现 代码中 ...

  8. python叠加矩形框图层

    两种方式以及效果: 方式一,使用PIL.Image.blend方式: from PIL import Image, ImageDraw im = Image.open('d:/tmp/58.249.0 ...

  9. nginx配置访问本地资源

    参考博客:https://www.cnblogs.com/xy51/p/9973326.html 需要访问路径:http://IP:10013/p1upgrade/picfiles/image73b4 ...

  10. rsync全网备份low方法

    要求: 1.基本备份要求已知3 台服务器主机名分别为web01.backup .nfs01,主机信息见下表:服务器说明外网IP(NAT) 内网IP(NAT) 主机名称nginx web 服务器10.0 ...