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的构造去构造
相关推荐
做midlet开发,如果需要用到乘幂运算,会用到这个函数。 文件名是float.java 里面包含了pow函数等midlet原本不具备的数学运算函数。
描述提到“c语言用顶点数做的浮点运算,java封装了一下”,这表明库中至少包含两种编程语言的实现:C语言的基础浮点运算以及Java对其的封装。C语言部分可能是用原始的浮点数处理方法,比如通过位操作或标准数学库...
在软件层面,开发者可以使用高级语言提供的库函数进行浮点运算,例如C++的库或Java的Math类。这些库通常已经实现了高效的浮点运算算法,但可能受到软件环境的性能限制。 综上所述,设计一个能够实现浮点型数运算的...
在Java 2 Micro Edition (J2ME)平台上,由于资源有限,不支持Java标准版(J2SE)中的所有功能,特别是浮点运算。J2ME主要针对移动设备和嵌入式系统,这些设备通常计算能力较弱,内存有限。因此,开发者需要找到一种...
为了克服这个问题,Java提供了`java.math.BigDecimal`类,它提供了一种方法来进行高精度的十进制计算,从而避免浮点运算中的精度问题。 描述中的"Java实现的浮点类的精确计算"很可能就是指一个自定义的工具类,该类...
在四则运算中,根据输入的数字类型,可能需要进行类型转换,例如将`int`转换为`double`以执行精确的浮点运算。 接下来,我们将探讨运算符的使用。在Java中,加法运算符是`+`,减法是`-`,乘法是`*`,除法是`/`。...
Java中精确的浮点运算操作示例 在 Java 中进行浮点运算操作时,需要注意浮点数的精确性问题。由于计算机采用的二进制表示法,无法精确地表示浮点数,会带来计算误差的问题。例如,以下代码: ```java public class...
"定点数转浮点运算"涉及到的是将使用定点表示法的数值转换为使用浮点表示法的数值,这一过程在许多计算任务中是必要的,特别是在处理硬件限制或特定算法时。 定点数的表示方式可以分为两种:有符号和无符号。在有...
利用java进行浮点型大数计算,支持四则运算和指数函数,三角函数,对数函数,双曲函数等运算,精度可调整。例如: MATH a=new MATH("1111.111111111111222222222222*33333333333); MATH b=a.eval("Sin(Pi())...
### 如何理解《Java的浮点运算如何伤害所有人》中的关键知识点 #### 摘要与概述 在文章《Java的浮点运算如何伤害所有人》中,作者们深入探讨了Java语言及其浮点运算机制中存在的问题,并分析了这些问题对用户、...
Java中的位运算是一种高效的操作,它是直接针对二进制位进行操作,因此在处理特定问题,如加密算法和图形算法时,位运算可以提供较高的性能。在Java中,位运算符包括右移(>>>),左移(),无符号右移(>>),按位与(&),按位...
【Java浮点型计算器】是一个基于Java编程语言开发的图形用户界面(GUI)应用程序,它提供了基本的数学运算,包括加法、减法、乘法和除法,针对浮点数进行计算。浮点型计算器的主要特点在于处理带有小数部分的数值,...
51单片机基础训练项目之简易计算器.功能:普通整型的加减乘除运算。可由读者自主学习并扩展至浮点运算.zip
输入一个四则运算表达式,本程序可计算出结果。另外还支持三角函数,对数运算,支持简单命令,如查看帮助和退出。输入help可查看详细情况。
Java控制台四则运算计算程序源码是一种基于Java编程语言实现的简单计算器,它能够处理任意长度的符合四则运算规则的数学表达式。在控制台上进行交互式操作,用户可以输入数学公式,程序会进行解析并计算出结果。这个...
对于浮点型计算,除法运算会自动产生浮点结果,即使两个操作数都是整型。 3. **控制流**:条件语句(if-else)和循环(for, while)是控制程序流程的关键工具。在计算器中,这些结构可能用于检查用户输入的合法性,...
在Java编程语言中,大数运算是一项重要的技术,特别是在处理超过普通整型或浮点型所能表示范围的数值时。Java提供了内置的`BigInteger`类和`BigDecimal`类来支持大数运算,这两个类位于`java.math`包下。本项目...
- **Java虚拟机浮点运算**: 介绍Java虚拟机如何处理浮点数运算,以及与IEEE 754标准的关系。 - **浮点模式**: 描述了Java虚拟机中浮点运算的不同模式及其对精度的影响。 **6. 异常处理** - **异常**: JVM支持异常...
"J2ME浮点库MathFP" 是一个专为Java Micro Edition (J2ME) 平台设计的浮点数处理库,它提供了对浮点运算的支持,包括基本的小数运算和一些复杂的数学函数。MathFP 库的出现是为了弥补J2ME平台原生对浮点计算支持的...
书中基于全新Java SE 8,完整且准确地阐述Java虚拟机规范,是深度了解Java虚拟机和Java语言实现细节的必读之作。 《Java核心技术系列:Java虚拟机规范(Java SE 8版)》共分7章。第1章从宏观的角度介绍了Java虚拟机...