`
小网客
  • 浏览: 1216494 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java之浮点运算

    博客分类:
  • Java
 
阅读更多

Java中的浮点数计算主要涉及float和double,他们都采用IEEE754标准,实际上是用利用科学计数法来表达实数。实数表示分为三个域: 

第一个域为符号域,0 表示数值为正数,而 1 则表示负数; 

第二个域为指数域,指数部分。其中单精度数为 8 位,双精度数为 11 位。float单精度的指数范围为-127 和 127 之间。 

第三个域为尾数域,其中单精度数为 23 位长,双精度数为 52 位长。

float用32bit存储,double用64bit存储。 double成为双精度:

double和float的区别:

1.double精度比较高,但是计算速度慢

2.原则是能用float的时候别用double

由于他们采用的是科学计数法来表述的,因此对计算要求比较高的地方不能采用直接double和float计算,建议采用BigDecimal,且必须用string去构造

举例如下:

public static void main(String[] args) {
	BigDecimal b1 = new BigDecimal("0.9");
	BigDecimal b2 = new BigDecimal("9");
	System.out.println(b1.multiply(b2).toString());
	double d1 = 0.9;
	double d2 = 9;
	System.out.println(d1 * d2);
	float f1 = 0.9f;
	float f2 = 9f;
	System.out.println(f1 * f2);

}

输出为:

8.1
8.1
8.099999

我们看到了float已经成无限接近了,但是满足不了需求。我们修改下测试case:

public static void main(String[] args) {
	BigDecimal b1 = new BigDecimal("0.009");
	BigDecimal b2 = new BigDecimal("9");
	System.out.println(b1.multiply(b2).toString());
	double d1 = 0.009;
	double d2 = 9;
	System.out.println(d1 * d2);
	float f1 = 0.009f;
	float f2 = 9f;
	System.out.println(f1 * f2);

}

输出结果变为:

0.081
0.08099999999999999
0.081

double已经变成无限接近了

上述具体造成的原因查阅相关文档。

切记:

在计算的时候为了保证精度需要用BigDecimal,且需要用string的构造去构造

 

0
0
分享到:
评论

相关推荐

    midlet java 浮点运算函数

    做midlet开发,如果需要用到乘幂运算,会用到这个函数。 文件名是float.java 里面包含了pow函数等midlet原本不具备的数学运算函数。

    fp-lib.zip_浮点数运算_浮点运算 c++

    c语言用顶点数做的浮点运算,java封装了一下

    Java中精确的浮点运算操作示例

    主要介绍了Java中精确的浮点运算操作方法,结合具体实例形式分析了java浮点数运算的相关函数、使用技巧与注意事项,需要的朋友可以参考下

    利用java进行浮点型大数计算,支持四则运算和指数函数,三角函数,对数函数,双曲函数等运算,精度可调整

    利用java进行浮点型大数计算,支持四则运算和指数函数,三角函数,对数函数,双曲函数等运算,精度可调整。例如: MATH a=new MATH("1111.111111111111222222222222*33333333333); MATH b=a.eval("Sin(Pi())...

    51单片机基础训练项目之简易计算器.功能:普通整型的加减乘除运算。可由读者自主学习并扩展至浮点运算.zip

    51单片机基础训练项目之简易计算器.功能:普通整型的加减乘除运算。可由读者自主学习并扩展至浮点运算.zip

    java运算四则运算表达式的程序

    输入一个四则运算表达式,本程序可计算出结果。另外还支持三角函数,对数运算,支持简单命令,如查看帮助和退出。输入help可查看详细情况。

    深入JAVA虚拟机第二版.pdf 目录

    译者序 前言 第1章 Java体系结构介绍 第2章 平台无关 第3章 安全 第4章 网络移动性 第5章 Java虚拟机 第6章 Java class文件 ...第14章 浮点运算 第15章 对象和数组 第16章 控制流 第17章 异常 第18章 finally子句

    Java Double相加出现的怪事

    Java Double相加出现的怪事,浮点运算不精确问题

    Java虚拟机规范.Java SE 8版.zip

    书中基于全新Java SE 8,完整且准确地阐述Java虚拟机规范,是深度了解Java虚拟机和Java语言实现细节的必读之作。 《Java核心技术系列:Java虚拟机规范(Java SE 8版)》共分7章。第1章从宏观的角度介绍了Java虚拟机...

    Java版pl0编译器

    这个是用Java编写的pl0的编译器,可以了解Java编程方法和编译原理。

    Java虚拟机规范.Java SE 8版

    书中基于全新Java SE 8,完整且准确地阐述Java虚拟机规范,是深度了解Java虚拟机和Java语言实现细节的必读之作。  《Java核心技术系列:Java虚拟机规范(Java SE 8版)》共分7章。第1章从宏观的角度介绍了Java...

    java2入门经典.part01

    浮点运算 混合数据类型的算术运算表达式 显式类型强制转换 赋值语句中的自动类型转换 op=运算符 数学函数和常量 字符的存储 字符转义序列 字符的算术运算 按位运算 使用AND和OR运算符 使用异或运算符 移位运算 按位...

    Java2入门经典.rar

    浮点运算 混合数据类型的算术运算表达式 显式类型强制转换 赋值语句中的自动类型转换 op=运算符 数学函数和常量 字符的存储 字符转义序列 字符的算术运算 按位运算 使用AND和OR运算符 使用异或运算符 移位运算 按位...

    【带书签】Java虚拟机规范(Java SE 7).pdf

    《Java虚拟机规范(Java SE 7版)》是Java领域最重要和最权威的著作之一,由Oracle官方发布,基于Java SE 7,对最新的Java虚拟机规范进行了完整且详细的讲解,是深度了解Java虚拟机实现细节的必读之作。由国内几位资深...

    Java虚拟机规范(Java SE 7)中文版

    《Java虚拟机规范(Java SE 7版)》是Java领域最重要和最权威的著作之一,由Oracle官方发布,基于Java SE 7,对最新的Java虚拟机规范进行了完整且详细的讲解,是深度了解Java虚拟机实现细节的必读之作。由国内几位资深...

    深入Java虚拟机(原书第2版)及书中源代码

    第14章 浮点运算 第15章 对象和数组 第16章 控制流 第17章 异常 第18章 finally子句 第19章 方法的调用与返回 第20章 指令invokespecial 第21章 线程同步 附录A 按操作码助记符排列的指令集 附录B 按功能排列的操作...

    math:Minecraft Java版中的浮点运算

    很快(希望如此),该数据包将能够在两个浮点数上执行算术运算……但还没有。 要安装,请将“ math”文件夹放入您所在的世界的“ datapacks”文件夹中。用法要将十进制数字转换为浮点数,首先需要使用三个记分板...

    深入Java虚拟机(原书第2版).pdf【附光盘内容】

    第14章 浮点运算 14.1 浮点数 14.2 inner float:揭示java float类型内部性质的applet 14.3 浮点模式 14.3.1 浮点值集合 14.3.2 浮点值集的转换 14.3.3 相关规则的本质 14.4 浮点操作码 14.5 一...

    表达式求值 Java实现

    支持浮点运算 支持通过CalString()返回错误信息 类结构: import java.util.*; class CalExpression ---static String CalString(String s) ---static String BuildString(String s) ---static int power...

    java学习总结 1.《Java核心技术》.rar

    Strictfp修饰的方法必须使用严格的浮点运算,以产生再生结果(满足可移植性)。 4、要得到完全可预测的结果比快速性能更为重要的话,请使用StrictMath类。 5、数字之间的合法转化。P44。 6、布尔值和任何数字类型...

Global site tag (gtag.js) - Google Analytics