Java
中浮点数(
double
、
float
)的计算是非精确计算,请看下面一个例子:
System.out.println(0.05 + 0.01);
System.out.println(1.0 - 0.42);
System.out.println(4.015 * 100);
System.out.println(123.3 / 100);
你的期望输出是什么?可实际的输出确实这样的:
0.060000000000000005
0.5800000000000001
401.49999999999994
1.2329999999999999
这个问题就非常严重了,如果你有
123.3
元要购买商品,
而计算机却认为你只有
123.29999999999999
元,钱不够,计算机拒绝交易。
在《Effective Java》这本书中也提到这个原则,float和double只能用来做科学计算或者是工程计算,在商业计算中我们要用java.math.BigDecimal。
原来我们如果需要精确计算,非要用String来够造BigDecimal不可!在《Effective Java》一书中的例子是用String来够造BigDecimal的,但是书上却没有强调这一点,这也许是一个小小的失误吧。
ps:java分类里面没有j2se的分类么。。。
分享到:
相关推荐
标题中的“fp-lib.zip_浮点数运算_浮点运算 c++”暗示了这是一个关于浮点数运算的库,主要用于C++编程环境。这个压缩包包含了一系列与浮点数计算相关的源代码文件和辅助资源,可能是一个小型的库或者教学示例。 ...
在 Java 中进行浮点运算操作时,需要注意浮点数的精确性问题。由于计算机采用的二进制表示法,无法精确地表示浮点数,会带来计算误差的问题。例如,以下代码: ```java public class ssss { public static void ...
在四则运算中,根据输入的数字类型,可能需要进行类型转换,例如将`int`转换为`double`以执行精确的浮点运算。 接下来,我们将探讨运算符的使用。在Java中,加法运算符是`+`,减法是`-`,乘法是`*`,除法是`/`。...
在Java中,需要注意的是类型转换。当不同数据类型的变量进行运算时,会自动进行类型提升,例如,int和double相加时,int会被提升为double类型。然而,类型提升并不总是安全的,例如,如果将一个大整数转换为byte,...
这种存储方式允许快速的浮点运算,但牺牲了数值的精确性。例如,某些看似简单的浮点数运算可能会产生非预期的结果,因为它们实际上是近似值而非精确值。以下是一个简单的示例,展示了浮点数运算的不精确性: ```...
它为开发者提供了更丰富的数学计算能力,使得在J2ME平台上开发需要进行浮点运算的应用变得更加便捷。值得注意的是,库中可能有多个版本的MathFP,分别针对不同的需求和性能优化,但对J2ME开发者来说,主要关注的是...
《浮点运算在Java ME(J2ME)中的应用与理解》 在移动设备和嵌入式系统的开发中,Java Micro Edition(J2ME)扮演了重要的角色。它为小型设备提供了一套精简的Java应用程序接口(API),使得开发者能够在资源有限的...
这是因为`float`和`double`类型虽然适用于科学计算和工程计算,但它们基于二进制浮点运算,不能保证完全精确的结果。而`BigDecimal`类提供了对任意精度的十进制数的支持,确保了商业计算中的准确性。 ### `...
总的来说,Java的数学运算需要注意取模运算符 `%` 对负数的特殊处理,以及浮点数(如 `double`)的精度限制。在处理特定问题时,理解这些概念有助于编写更健壮、高效的代码。通过故事和实例,我们可以更好地理解这些...
- Java的浮点运算可能不如C++或Fortran精确,因此在处理高精度要求的场合需要注意。 - 对于非2的幂的序列长度,可以填充零项或者采用其他非radix-2的FFT算法。 在给定的"fft"压缩包文件中,包含了用Java实现的FFT...
对于更高级的数值计算,Java引入了BigDecimal类,用于处理需要高精度和可控制精度的浮点运算。BigDecimal避免了浮点类型的精度问题,但性能相对较低,适合对精度要求严格的场景。 在Java中实现数值计算算法,还需要...
在树莓派上,确保你已启用硬件浮点运算,这通常是默认的,但检查一下总是好的。 8. **更新替代列表**: 如果你有多个Java版本,可以使用`update-alternatives`命令管理它们,以设置默认使用的Java版本。 9. **使用...
Java中的位运算是一种高效的操作,它是CPU直接支持的指令,主要应用于处理二进制数据,尤其是在加密算法和图形算法中。位运算符包括右移(>>>),左移(),无符号右移(>>),按位与(&),按位或(|),按位异或(^)以及按位取反(~...
在Java编程语言中,实现基本的数学运算如加法、减法、乘法和除法是相当直观的。这些操作可以直接在整数、浮点数或其他数字类型之间进行。下面我们将详细探讨如何在Java中实现这些基本的算术运算。 1. **基本数据...
本文将详细介绍`strictfp`关键字的意义、作用机制以及它如何影响Java程序中的浮点运算。 #### 二、strictfp关键字概述 `strictfp`关键字是Java语言中用于控制浮点运算精确度的关键字。当一个类或方法被声明为`...
在Java语言中,字符可以参加算术运算,但需要注意强制类型转换。占字节多的变量不能直接赋值给占字节少的变量,需要强制类型转换。 Java语言也支持各种操作符和语句,例如算术运算符、比较运算符、逻辑运算符、赋值...
- 文档中可能未直接涉及异常处理的代码,但在实际编程中需要注意捕获和处理异常。 9. Java中的注释和文档说明: - Java支持三种注释方式:单行注释(//)、多行注释(/* ... */)和文档注释(/** ... */)。 - ...