`
小网客
  • 浏览: 1243528 次
  • 性别: 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封装了一下”,这表明库中至少包含两种编程语言的实现:C语言的基础浮点运算以及Java对其的封装。C语言部分可能是用原始的浮点数处理方法,比如通过位操作或标准数学库...

    jisuanji.rar_浮点开方_浮点运算器

    在软件层面,开发者可以使用高级语言提供的库函数进行浮点运算,例如C++的库或Java的Math类。这些库通常已经实现了高效的浮点运算算法,但可能受到软件环境的性能限制。 综上所述,设计一个能够实现浮点型数运算的...

    j2me 数学浮点运算源码

    在Java 2 Micro Edition (J2ME)平台上,由于资源有限,不支持Java标准版(J2SE)中的所有功能,特别是浮点运算。J2ME主要针对移动设备和嵌入式系统,这些设备通常计算能力较弱,内存有限。因此,开发者需要找到一种...

    Java实现的浮点类的精确计算

    为了克服这个问题,Java提供了`java.math.BigDecimal`类,它提供了一种方法来进行高精度的十进制计算,从而避免浮点运算中的精度问题。 描述中的"Java实现的浮点类的精确计算"很可能就是指一个自定义的工具类,该类...

    java.四则运算器

    在四则运算中,根据输入的数字类型,可能需要进行类型转换,例如将`int`转换为`double`以执行精确的浮点运算。 接下来,我们将探讨运算符的使用。在Java中,加法运算符是`+`,减法是`-`,乘法是`*`,除法是`/`。...

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

    Java中精确的浮点运算操作示例 在 Java 中进行浮点运算操作时,需要注意浮点数的精确性问题。由于计算机采用的二进制表示法,无法精确地表示浮点数,会带来计算误差的问题。例如,以下代码: ```java public class...

    定点数转浮点运算

    "定点数转浮点运算"涉及到的是将使用定点表示法的数值转换为使用浮点表示法的数值,这一过程在许多计算任务中是必要的,特别是在处理硬件限制或特定算法时。 定点数的表示方式可以分为两种:有符号和无符号。在有...

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

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

    How Java’s Floating-Point Hurts Everyone Everywhere

    ### 如何理解《Java的浮点运算如何伤害所有人》中的关键知识点 #### 摘要与概述 在文章《Java的浮点运算如何伤害所有人》中,作者们深入探讨了Java语言及其浮点运算机制中存在的问题,并分析了这些问题对用户、...

    java位运算大全.doc

    Java中的位运算是一种高效的操作,它是直接针对二进制位进行操作,因此在处理特定问题,如加密算法和图形算法时,位运算可以提供较高的性能。在Java中,位运算符包括右移(>>>),左移(),无符号右移(>>),按位与(&),按位...

    Java浮点型计算器

    【Java浮点型计算器】是一个基于Java编程语言开发的图形用户界面(GUI)应用程序,它提供了基本的数学运算,包括加法、减法、乘法和除法,针对浮点数进行计算。浮点型计算器的主要特点在于处理带有小数部分的数值,...

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

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

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

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

    java控制台四则运算计算程序源码

    Java控制台四则运算计算程序源码是一种基于Java编程语言实现的简单计算器,它能够处理任意长度的符合四则运算规则的数学表达式。在控制台上进行交互式操作,用户可以输入数学公式,程序会进行解析并计算出结果。这个...

    java计算器(整型+浮点型)

    对于浮点型计算,除法运算会自动产生浮点结果,即使两个操作数都是整型。 3. **控制流**:条件语句(if-else)和循环(for, while)是控制程序流程的关键工具。在计算器中,这些结构可能用于检查用户输入的合法性,...

    Java编写的大数运算

    在Java编程语言中,大数运算是一项重要的技术,特别是在处理超过普通整型或浮点型所能表示范围的数值时。Java提供了内置的`BigInteger`类和`BigDecimal`类来支持大数运算,这两个类位于`java.math`包下。本项目...

    Java虚拟机特性JAVA SE 7.pdf-中文完整书签文字版

    - **Java虚拟机浮点运算**: 介绍Java虚拟机如何处理浮点数运算,以及与IEEE 754标准的关系。 - **浮点模式**: 描述了Java虚拟机中浮点运算的不同模式及其对精度的影响。 **6. 异常处理** - **异常**: JVM支持异常...

    J2ME浮点库MathFP

    "J2ME浮点库MathFP" 是一个专为Java Micro Edition (J2ME) 平台设计的浮点数处理库,它提供了对浮点运算的支持,包括基本的小数运算和一些复杂的数学函数。MathFP 库的出现是为了弥补J2ME平台原生对浮点计算支持的...

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

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

Global site tag (gtag.js) - Google Analytics