`
hn_archer
  • 浏览: 133041 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类
最新评论

计算精度问题 - double和float

 
阅读更多

在进行数字计算的时候,会出现莫名的情况,比如: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-String"指向的是Java中处理浮点数(double和float)以及字符串表示的数值时可能遇到的精度问题,以及如何通过特定方法实现精确计算。描述中提到的链接指向了一个具体的博客...

    详解iOS之关于double/float数据计算精度问题

    iOS 开发中,double 和 float 数据类型的计算精度问题是一个常见的问题。本篇文章将详细介绍 iOS 中 double/float 数据计算精度问题的根源、解决方案和高精度计算方法。 一、double/float 数据计算精度问题的根源 ...

    float double精度的详细解释

    ### float与double精度详解 #### 一、浮点数的基础概念 ...了解`float`和`double`的区别及其内部表示方式,有助于开发者在选择合适的数据类型时做出正确的决策,尤其是在涉及高精度计算或大范围数值时尤为重要。

    float与double的范围和精度

    在实际应用中,float和double的精度对计算结果的准确性产生了重要的影响。例如,在科学计算和数据分析中,需要使用double类型来保证足够的精度。 3. Oracle中的Number类型 在Oracle中,Number类型可以用来存储0、...

    HEX-Float转换工具 16进制转成float 或double类型数据的一个小工具

    在IT行业中,数据转换是日常工作中常见的操作之一。特别是在处理二进制数据或者进行低级编程时,了解如何将十六进制(HEX...在实际工作中,结合这样的工具,我们可以更好地进行数据处理和问题排查,从而提升工作质量。

    float和double

    本文将详细解释float和double的范围和精度,及其在商业计算中的应用问题和解决方法。 1. 范围 float和double的范围是由指数的位数来决定的。float的指数位有8位,而double的指数位有11位。因此,float的指数范围为...

    float、double类型介绍.zip

    总结来说,float和double是编程中处理浮点数的关键数据类型,理解它们的表示方法、精度、误差和运算规则是编写高效、准确的科学计算程序的基础。在实际开发中,开发者需要根据需求来平衡精度、性能和内存消耗,合理...

    浮点数的存储结构(double和float)

    3. **精度和范围**:由于`float`和`double`的位数不同,它们的精度和表示的数值范围也有所差异。`double`通常具有更高的精度和更大的数值范围,因此在需要更高精度的计算中更常被使用。 了解这些基础知识后,可以...

    第1章 高精度计算-2019-02-19

    ### 高精度计算知识点 #### 1. 高精度计算背景及意义 高精度计算是在计算机科学领域中解决...以上就是关于高精度计算的一些基本概念和技术要点,通过这些方法,可以有效地解决传统数据类型无法解决的大数运算问题。

    基于C++浮点数(float、double)类型数据比较与转换的详解

    在实际开发中,为了确保较高的精度,通常建议使用`double`类型而不是`float`,特别是在涉及数值计算和转换的时候。同时,当将浮点数转换为字符串时,使用`%.8lf`作为精度设置可以提供足够的显示精度,但需注意这并不...

    C#中处理多位小数精度的精度问题

    为了解决这个问题,C#引入了`decimal`类型,它是一种定点数类型,适合进行货币计算和其他需要高精度的场合。 标题"处理多位小数精度的精度问题"指向的就是使用`decimal`类型来避免浮点数类型的精度损失。`decimal`...

    iOS 解决floatValue,doubleValue等计算不精确问题,一句话解决精确计算,精确比较

    5. **利用String的`floatValue`和`doubleValue`**:虽然`floatValue`和`doubleValue`在计算时可能出现不精确,但在将字符串转换为浮点数时,它们可以提供精确的转换。例如,从用户输入或者配置文件中读取浮点数时,...

    float_double存储问题

    float 和 double 是 C 语言和 C# 语言中最常用的浮点类型,它们分别使用单精度和双精度来存储浮点数据。 float 数据占用 32bit,而 double 数据占用 64bit。 在 IEEE 的规范下,float 遵从的是 IEEE R32.24,而 ...

    long_double_float_implicit.rar_float

    标题 "long_double_float_implicit.rar_float" 暗示了我们正在探讨与浮点数类型相关的编程主题,特别是`long double`和`float`。在C语言或类似的编程环境中,`long double`通常代表最高精度的浮点数类型,而`float`...

    十六进制(HEX)和浮点类型(float、double)转换工具

    而浮点类型,如float和double,是用于存储小数的数值类型,广泛应用于科学计算、图形处理等领域。了解和掌握十六进制与浮点类型的转换是每一位IT专业人员的基本技能。 十六进制是一种逢16进1的计数系统,使用16个...

    C# 按照IEEE 754标准对Float和Double类型进行转换

    在实际编程中,`float`和`double`的转换常常应用于科学计算、图形渲染、金融计算等领域,因此了解并熟练掌握IEEE 754标准和C#中的浮点数处理是非常关键的。 文件列表中的"UniEncoder.sln"和"UniEncoder.suo"通常与...

    c#中decimal ,double,float的区别.doc

    decimal, double, 和 float 是 C# 中三种不同的浮点数类型,它们之间的区别在于精度、范围和应用场景。 首先,float 是 32 位单精度浮点数,具有 7 位有效数字,范围约为 ±1.5 × 10^(-45) 到 ±3.4 × 10^(38)。...

    Keil MDK-ARM各种数据类型占用的字节数 char short int float double

    在进行移植和优化代码时,了解这些基本数据类型的大小对于内存管理、计算效率以及兼容性非常重要。例如,在定义数组或结构体时,需要考虑数据类型占用的存储空间,以避免不必要的内存浪费。此外,理解数据类型的大小...

    解决java数值范围以及float与double精度丢失的问题

    解决java数值范围以及float与double精度丢失...在进行开发时,需要了解Java中的数值范围和浮点数精度问题,以避免出现错误和问题。同时,需要了解解决float和double类型的精度问题的方法,以确保开发的正确性和可靠性。

Global site tag (gtag.js) - Google Analytics