在进行数字计算的时候,会出现莫名的情况,比如:1-0.4=0.60000001。
看如下代码:
public static void main(String[] args) { System.out.println((1-0.8)*31.14*2); double a1 = 1; double b1 = 0.8; double c1 = 31.14; double d1 = 2; System.out.println((a1-b1)*c1*d1); float a2 = 1; float b2 = 0.8f; float c2 = 31.14f; float d2 = 2; System.out.println((a2-b2)*c2*d2); BigDecimal a3 = new BigDecimal(1); BigDecimal b3 = new BigDecimal(0.8); BigDecimal c3 = new BigDecimal(31.14); BigDecimal d3 = new BigDecimal(2); System.out.println(a3.subtract(b3).multiply(c3).multiply(d3)); BigDecimal a4 = new BigDecimal("1"); BigDecimal b4 = new BigDecimal("0.8"); BigDecimal c4 = new BigDecimal("31.14"); BigDecimal d4 = new BigDecimal("2"); System.out.println(a4.subtract(b4).multiply(c4).multiply(d4)); } 输出结果: 12.455999999999998 12.455999999999998 12.455999 12.455999 12.45599999999999746158607649704203548831061993239289114937182190168130091478815302252769 12.456
结论:
从这个试例可以看出,在进行数字运算的时候,尽可能的用BigDecimal,
并且使用new BigDecimal(String val);的构造方法。
相关推荐
标题中的"Java 精确计算 - double-float-String"指向的是Java中处理浮点数(double和float)以及字符串表示的数值时可能遇到的精度问题,以及如何通过特定方法实现精确计算。描述中提到的链接指向了一个具体的博客...
iOS 开发中,double 和 float 数据类型的计算精度问题是一个常见的问题。本篇文章将详细介绍 iOS 中 double/float 数据计算精度问题的根源、解决方案和高精度计算方法。 一、double/float 数据计算精度问题的根源 ...
### float与double精度详解 #### 一、浮点数的基础概念 ...了解`float`和`double`的区别及其内部表示方式,有助于开发者在选择合适的数据类型时做出正确的决策,尤其是在涉及高精度计算或大范围数值时尤为重要。
在实际应用中,float和double的精度对计算结果的准确性产生了重要的影响。例如,在科学计算和数据分析中,需要使用double类型来保证足够的精度。 3. Oracle中的Number类型 在Oracle中,Number类型可以用来存储0、...
在IT行业中,数据转换是日常工作中常见的操作之一。特别是在处理二进制数据或者进行低级编程时,了解如何将十六进制(HEX...在实际工作中,结合这样的工具,我们可以更好地进行数据处理和问题排查,从而提升工作质量。
本文将详细解释float和double的范围和精度,及其在商业计算中的应用问题和解决方法。 1. 范围 float和double的范围是由指数的位数来决定的。float的指数位有8位,而double的指数位有11位。因此,float的指数范围为...
总结来说,float和double是编程中处理浮点数的关键数据类型,理解它们的表示方法、精度、误差和运算规则是编写高效、准确的科学计算程序的基础。在实际开发中,开发者需要根据需求来平衡精度、性能和内存消耗,合理...
3. **精度和范围**:由于`float`和`double`的位数不同,它们的精度和表示的数值范围也有所差异。`double`通常具有更高的精度和更大的数值范围,因此在需要更高精度的计算中更常被使用。 了解这些基础知识后,可以...
### 高精度计算知识点 #### 1. 高精度计算背景及意义 高精度计算是在计算机科学领域中解决...以上就是关于高精度计算的一些基本概念和技术要点,通过这些方法,可以有效地解决传统数据类型无法解决的大数运算问题。
在实际开发中,为了确保较高的精度,通常建议使用`double`类型而不是`float`,特别是在涉及数值计算和转换的时候。同时,当将浮点数转换为字符串时,使用`%.8lf`作为精度设置可以提供足够的显示精度,但需注意这并不...
为了解决这个问题,C#引入了`decimal`类型,它是一种定点数类型,适合进行货币计算和其他需要高精度的场合。 标题"处理多位小数精度的精度问题"指向的就是使用`decimal`类型来避免浮点数类型的精度损失。`decimal`...
5. **利用String的`floatValue`和`doubleValue`**:虽然`floatValue`和`doubleValue`在计算时可能出现不精确,但在将字符串转换为浮点数时,它们可以提供精确的转换。例如,从用户输入或者配置文件中读取浮点数时,...
float 和 double 是 C 语言和 C# 语言中最常用的浮点类型,它们分别使用单精度和双精度来存储浮点数据。 float 数据占用 32bit,而 double 数据占用 64bit。 在 IEEE 的规范下,float 遵从的是 IEEE R32.24,而 ...
标题 "long_double_float_implicit.rar_float" 暗示了我们正在探讨与浮点数类型相关的编程主题,特别是`long double`和`float`。在C语言或类似的编程环境中,`long double`通常代表最高精度的浮点数类型,而`float`...
而浮点类型,如float和double,是用于存储小数的数值类型,广泛应用于科学计算、图形处理等领域。了解和掌握十六进制与浮点类型的转换是每一位IT专业人员的基本技能。 十六进制是一种逢16进1的计数系统,使用16个...
在实际编程中,`float`和`double`的转换常常应用于科学计算、图形渲染、金融计算等领域,因此了解并熟练掌握IEEE 754标准和C#中的浮点数处理是非常关键的。 文件列表中的"UniEncoder.sln"和"UniEncoder.suo"通常与...
decimal, double, 和 float 是 C# 中三种不同的浮点数类型,它们之间的区别在于精度、范围和应用场景。 首先,float 是 32 位单精度浮点数,具有 7 位有效数字,范围约为 ±1.5 × 10^(-45) 到 ±3.4 × 10^(38)。...
在进行移植和优化代码时,了解这些基本数据类型的大小对于内存管理、计算效率以及兼容性非常重要。例如,在定义数组或结构体时,需要考虑数据类型占用的存储空间,以避免不必要的内存浪费。此外,理解数据类型的大小...
解决java数值范围以及float与double精度丢失...在进行开发时,需要了解Java中的数值范围和浮点数精度问题,以避免出现错误和问题。同时,需要了解解决float和double类型的精度问题的方法,以确保开发的正确性和可靠性。