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

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. 简单RTSCamera实现

    using System.Collections; using System.Collections.Generic; using UnityEngine; public class TopCamer ...

  2. JS代码下载百度文库纯文本文档

    下载百度文库纯文本文档流程 1.按 F12 或  Ctrl+Shift+I打开后台(或点击右键,在点击检查)[建议使用谷歌浏览器] 2.切换到控制台,赋值粘贴以下js代码,回车后,浏览器将自动下载保存 ...

  3. espcms代码审计(二次urldecode注入分析)

    这里提到的漏洞是二次urldecode注入 这里用到的还是espcms,不过版本应该跟之前的有所不同,在网上找到的espcms源代码都是已经修补了这个漏洞的,我们对比分析吧 先放上漏洞位置代码,也就是 ...

  4. JVM 垃圾回收?全面详细安排!

    写在前面: 小伙伴儿们,大家好!今天来学习Java虚拟机相关内容,作为面试必问的知识点,来深入了解一波! 思维导图: image-20201207153125210 1,判断对象是否死亡 我们在进行垃 ...

  5. 【科技】单 $\log$ 合并两棵有交集 FHQ-Treap 的方法

    维护可分裂 & 合并的可重集 考虑这样一个问题: 维护 \(n\) 个 可重集 \(S_1, S_2, \cdots, S_n\),元素值域为 \([1, U]\),初始集合为空.支持一下操作 ...

  6. li = [11,22,33,44,55,66,77,88,99]分类

    方法一: li = [11,22,33,44,55,66,77,88,99]s = []m = []for i in li: if i <= 55: s.append(i) else: m.ap ...

  7. shell--检查apache是否启动脚本

    #首先我们需要检查apache是否以启动,这里我们用到的说nmap命令,Linux默认情况下是没有安装nmap命令的. #那么我们需要安装下nmap,安装的命令很简单:yum -y install n ...

  8. Day8 python高级特性-- 迭代 Iteration

    通过for循环来遍历 list.tuple.dict.甚至是字符串,这种遍历被称为迭代. 相比于C的for循环, Python的for循环抽象成都更好,不仅可以用在list或tuple上,还可以用在其 ...

  9. JavaSE14-集合·其一

    1.Collection集合 1.1 集合体系结构 集合 (接口)Collection:单列 (接口)List:可重复 (实现类)ArrayList (实现类)LinkedList (接口)Set:不 ...

  10. Spring Cloud Alibaba (一): SpringCloud与SpringBoot版本选型

    前言   近年SpringCloud与SpringBoot更新迭代非常频繁,导致我们对两者的版本选型非常的困难.若是版本选择有问题, 会导致开发中调试兼容性占用非常多的得必要时间. SpringClo ...