float和double型,的底层实现是二进制的。十进制中的一个有限位数小数,转换成二进制就不一定是有限位数了,一旦位数超过的float和double型的位数宽度,就会出现“精度溢出”。所以float和double型是为了科学计算而设计的,并不适合精确的十进制计算.
就像一个十进制的小数,要不断地乘以2取整,但在这个过程中可能会一直循环下去,这就造成了数据的不精确。
所以在必须要求数据的精确度时,不能使用float和double.
public class Test{
public static void main(String[] args)
{
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
BigDecimal类可解决计算精度问题可使用BigDecimal类创建一个封装类。封装加减乘除操作
例:对一个小数进行指定位数的四舍五入:
BigDecimal bd = new BigDecimal("0.9851095");
BigDecimal one = new BigDecimal("1");
System.out.println(bd.divide(one, 3, BigDecimal.ROUND_HALF_UP));
BigDecimal中还有很多相关的数值之间的计算方法,以及精确到的位数和四舍五入等
分享到:
相关推荐
float与double的范围和精度 float和double是两种常用的浮点数类型,它们的范围和精度是由其内部存储格式决定的。了解float和double的范围和精度对于编程和数据处理非常重要。 1. 范围 float和double的范围是由...
### float与double精度详解 #### 一、浮点数的基础概念 ...了解`float`和`double`的区别及其内部表示方式,有助于开发者在选择合适的数据类型时做出正确的决策,尤其是在涉及高精度计算或大范围数值时尤为重要。
本篇文章将详细介绍 iOS 中 double/float 数据计算精度问题的根源、解决方案和高精度计算方法。 一、double/float 数据计算精度问题的根源 在 iOS 开发中,我们经常使用 double 和 float 数据类型来表示小数。但是...
本文将详细解释float和double的范围和精度,及其在商业计算中的应用问题和解决方法。 1. 范围 float和double的范围是由指数的位数来决定的。float的指数位有8位,而double的指数位有11位。因此,float的指数范围为...
本文将详细介绍Java中的 `double` 类型精度问题,并提供几种解决方法。 #### 一、Java Double 精度丢失的原因 1. **二进制表示限制**:`double` 类型基于IEEE 754标准的双精度格式,使用64位来表示一个浮点数。...
下面我们将详细探讨Java中的数值范围、float和double类型的精度问题,并且提供解决方案。 一、Java中的数值范围 Java中的基本数据类型有多种,包括整数类型(int、long)、浮点数类型(float、double)。每种类型...
总结来说,float和double是编程中处理浮点数的关键数据类型,理解它们的表示方法、精度、误差和运算规则是编写高效、准确的科学计算程序的基础。在实际开发中,开发者需要根据需求来平衡精度、性能和内存消耗,合理...
3. **精度和范围**:由于`float`和`double`的位数不同,它们的精度和表示的数值范围也有所差异。`double`通常具有更高的精度和更大的数值范围,因此在需要更高精度的计算中更常被使用。 了解这些基础知识后,可以...
例如,`float`和`double`类型的值在进行加减乘除运算后,结果可能与预期不符,尤其是在比较两个浮点数是否相等时,直接使用`==`可能会得到错误的结果。 为了解决这个问题,我们可以采用以下策略: 1. **避免直接...
这是因为浮点数在内存中的二进制表示导致的,且`float`和`double`各有不同的精度限制。 2. **浮点数转换为字符串**: 使用`sprintf()`函数将浮点数转换为字符串时,需要注意精度控制。对于`float`,它的小数点前后...
float 和 double 是 C 语言和 C# 语言中最常用的浮点类型,它们分别使用单精度和双精度来存储浮点数据。 float 数据占用 32bit,而 double 数据占用 64bit。 在 IEEE 的规范下,float 遵从的是 IEEE R32.24,而 ...
标题中的"Java 精确计算 - double-float-String"指向的是Java中处理浮点数(double和float)以及字符串表示的数值时可能遇到的精度问题,以及如何通过特定方法实现精确计算。描述中提到的链接指向了一个具体的博客...
本知识点主要围绕STM32的Flash闪存存储展开,讲解如何支持多种数据类型的存储,包括double和float等浮点型数据。 一、STM32 Flash存储概述 STM32的Flash存储器是其非易失性存储的一部分,它可以在断电后仍能保持...
特别是在处理二进制数据或者进行低级编程时,了解如何将十六进制(HEX)转换为浮点数(float)或双精度浮点数(double)至关重要。这个"HEX-Float转换工具"就是这样一个实用程序,它帮助用户方便快捷地完成这种转换...
例如,可以采用`double`代替`float`以获得更高的精度,或者在必要时使用高精度库如GMP(GNU Multiple Precision Arithmetic Library)来避免精度损失。 总结来说,从`int`到`float`的转换可能会因为浮点数的有限...
标题 "long_double_float_implicit.rar_float" 暗示了我们正在探讨与浮点数类型相关的编程主题,特别是`long double`和`float`。在C语言或类似的编程环境中,`long double`通常代表最高精度的浮点数类型,而`float`...
在进行浮点数转换时,需要注意精度丢失和溢出问题。由于浮点数的有限精度,某些特定的十进制数字可能无法精确表示为二进制浮点数,这可能导致计算结果出现微小的误差。此外,过大或过小的数值可能会导致指数溢出,...
总的来说,十六进制与浮点类型转换是IT从业者必备的知识点,能够深入理解这个主题,不仅可以提高编程效率,还能增强问题解决能力。而“HexFloat.exe”这样的工具,作为辅助手段,有助于我们更便捷地进行这种转换,...
为了解决这个问题,C#引入了`decimal`类型,它是一种定点数类型,适合进行货币计算和其他需要高精度的场合。 标题"处理多位小数精度的精度问题"指向的就是使用`decimal`类型来避免浮点数类型的精度损失。`decimal`...