`

java float vs double

    博客分类:
  • java
 
阅读更多

 * java当中默认声明的小数是double类型的;

 * double d=4.0

 * 如果声明:

 * float x = 4.0则会报错,需要如下写法:

 * float x = 4.0f或者float x = (float)4.0

 * 其中4.0f后面的f只是为了区别double,并不代表任何数字上的意义

 * 

 * float 内存分配4个字节,占32位,有效小数位6-7位

 * double 型 内存分配8个字节,有效小数位15位

 

flaot:

 

Java代码  收藏代码
  1. float x = 3.56412f;  
  2. float y = 5.13f;  
  3. System.out.println(x+y);  

 输出:8.69412

 

 

 *  在《Effective Java》这本书中也提到这个原则: float和double只能用来做科学计算或者是工程计算; 在商业计算中我们要用java.math.BigDecimal。

如下代码:

 

 

Java代码  收藏代码
  1. double z = 3.564;  
  2. double a = 5.13;  
  3. System.out.println(z+a);  

 输出:8.693999999999999

 

如果使用java.math.BigDecimal类进行计算:

 

Java代码  收藏代码
  1. /** 
  2.  * 提供精确的加法运算。 
  3.  * @param v1 被加数 
  4.  * @param v2 加数 
  5.  * @return 两个参数的和 
  6.  */  
  7.  public static double add(double v1,double v2)  
  8.  {  
  9.      BigDecimal b1 = new BigDecimal(Double.toString(v1));  
  10.      BigDecimal b2 = new BigDecimal(Double.toString(v2));  
  11.      return b1.add(b2).doubleValue();  
  12.  }  

 输出:8.694

 

由此引出减法的计算:

 

Java代码  收藏代码
  1. /** 
  2.  * 提供精确的减法运算。 
  3.  * @param v1 被减数 
  4.  * @param v2 减数 
  5.  * @return 两个参数的差 
  6.  */  
  7.  public static double sub(double v1,double v2){  
  8.      BigDecimal b1 = new BigDecimal(Double.toString(v1));  
  9.      BigDecimal b2 = new BigDecimal(Double.toString(v2));  
  10.      return b1.subtract(b2).doubleValue();  
  11.  }  

 

乘法的计算:

 

Java代码  收藏代码
  1. /** 
  2.  * 提供精确的乘法运算。 
  3.  * @param v1 被乘数 
  4.  * @param v2 乘数 
  5.  * @return 两个参数的积 
  6.  */  
  7.  public static double mul(double v1,double v2) {  
  8.      BigDecimal b1 = new BigDecimal(Double.toString(v1));  
  9.      BigDecimal b2 = new BigDecimal(Double.toString(v2));  
  10.      return b1.multiply(b2).doubleValue();  
  11.  }  

 

 除法的计算:

 

Java代码  收藏代码
  1. /** 
  2.  * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到 
  3.  * 小数点以后10位,以后的数字四舍五入。 
  4.  * @param v1 被除数 
  5.  * @param v2 除数 
  6.  * @return 两个参数的商 
  7.  */  
  8.  public static double div(double v1,double v2) {  
  9.      return div(v1,v2,10);  
  10.  }  
  11.  /** 
  12.  * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指 
  13.  * 定精度,以后的数字四舍五入。 
  14.  * @param v1 被除数 
  15.  * @param v2 除数 
  16.  * @param scale 表示表示需要精确到小数点以后几位。 
  17.  * @return 两个参数的商 
  18.  */  
  19.  public static double div(double v1,double v2,int scale){  
  20.      if(scale<0){  
  21.          throw new IllegalArgumentException("The scale must be a positive integer or zero");  
  22.      }  
  23.      BigDecimal b1 = new BigDecimal(Double.toString(v1));  
  24.      BigDecimal b2 = new BigDecimal(Double.toString(v2));  
  25.      return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();  
  26.  }  

 

提供精确的小数位四舍五入处理:

 

Java代码  收藏代码
  1. /** 
  2.  * 提供精确的小数位四舍五入处理。 
  3.  * @param v 需要四舍五入的数字 
  4.  * @param scale 小数点后保留几位 
  5.  * @return 四舍五入后的结果 
  6.  */  
  7.  public static double round(double v,int scale) {  
  8.      if(scale<0){  
  9.          throw new IllegalArgumentException("The scale must be a positive integer or zero");  
  10.      }  
  11.      BigDecimal b = new BigDecimal(Double.toString(v));  
  12.      BigDecimal one = new BigDecimal("1");  
  13.      return b.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue();  
  14.  }  
分享到:
评论

相关推荐

    详解java中float与double的区别

    Java 中 float 和 double 的区别详解 float 和 double 是 Java 中两种基本数据类型,都是用来表示实数的,但是它们有很大的区别。float 是单精度类型,精度是 8 位有效数字,取值范围是 10 的 -38 次方到 10 的 38 ...

    float、double类型介绍.zip

    标题中的“float、double类型介绍”指的是在编程语言中,如C++、Java或Python等,用于表示浮点数的数据类型。浮点数是计算机科学中用来表示小数的一种方式,因为它们不是精确的,而是近似的。浮点类型通常分为两种...

    Java 精确计算-double-float-String

    标题中的"Java 精确计算 - double-float-String"指向的是Java中处理浮点数(double和float)以及字符串表示的数值时可能遇到的精度问题,以及如何通过特定方法实现精确计算。描述中提到的链接指向了一个具体的博客...

    float和double

    float和double浮点数类型的精度和范围解析 浮点数类型float和double是编程语言中最常用的数值类型,但是它们...因此,在商业计算中,我们应该使用java.math.BigDecimal来避免精度问题,而不是使用float和double类型。

    Java Double相加出现的怪事

    Java 中的浮点数类型 float 和 double 在进行运算时会出现不精确的问题,这是因为计算机无法精确地表示十进制小数。这种问题不仅存在于 Java 中,在其它许多编程语言中也存在。 问题的提出: 编译运行下面的 Java ...

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

    解决java数值范围以及float与double精度丢失的问题 Java中的数值范围和浮点数精度问题是许多开发者经常遇到的问题。下面我们将详细探讨Java中的数值范围、float和double类型的精度问题,并且提供解决方案。 一、...

    jni 使用float double

    int float double string char * C-&gt;Java Java-&gt;C 实例

    16位转浮点型float,MODBUS 32位转浮点型float 64位转双浮点型double

    本篇主要介绍16位、32位以及64位数据如何转换为浮点型(float)和双浮点型(double)。 首先,我们要理解二进制、16进制与浮点数的关系。计算机内部存储数字都是以二进制形式,而16进制是人类更易读的一种表示方式...

    Java实现IEE754 Float类型数据

    ### Java实现IEEE 754 Float类型数据解析 在计算机科学领域中,浮点数的表示方式至关重要,尤其是在处理科学计算、图形渲染等对精度有较高要求的应用场景中。IEEE 754标准定义了一种广泛使用的浮点数表示方法,它被...

    Java数值类型与byte数组相互转换

    Java bytes数组与基本类型的相互转换 Int -&gt; Bytes int64ToByte8 int48ToByte6 int40ToByte5 int32ToByte4 int24ToByte3 int16ToByte2 int8ToByte Bytes -&gt; Int bytesToInt64 bytesToInt48 bytesToInt40 bytesTo...

    java-16进制4字节转Float

    在Java中,浮点数有两种主要形式:单精度浮点数(float)和双精度浮点数(double),它们分别使用32位和64位来存储。 1. **字节序**:在进行16进制到浮点数的转换时,必须考虑到字节序,即字节在内存中的排列顺序。...

    Java与MySQL中小数保存问题解析.pptx.pptx

    Java的float对应MySQL的FLOAT,double对应DOUBLE。当处理小数时,确保在SQL语句中使用正确的数据类型,并且在Java代码中正确地转换和处理结果。 常见问题还包括在进行浮点数运算时可能出现的精度丢失,以及在设计...

    float型和double型数据的存储方式1

    在Java中,当从float强制转换为double时,理论上数值不会改变,但由于初始的存储精度限制,可能存在微小的误差。这种误差在处理大量浮点运算或高精度要求的应用中是需要特别注意的,因为它可能会影响计算结果的准确...

    Java中double类型下出现精度计算错误情况下出力方法

    Java中的简单浮点数类型float和double不能够进行运算,因为大多数情况下是正常的,但是偶尔会出现如上所示的问题。这个问题其实不是JAVA的bug,因为计算机本身是二进制的,而浮点数实际上只是个近似值,所以从二进制...

    Android String类型转换为float、double和int的工具类方法

    本文将详细讲解如何使用自定义工具类`ConvertUtil`将`String`类型转换为`float`、`double`和`int`。这些方法在处理可能出现的空值或异常时,提供了优雅的错误处理机制。 首先,我们来看`convertToFloat`方法,其...

    Java源码获取浮点数类型的最大最小值

    在Java编程语言中,浮点数类型包括`float`和`double`,它们分别用于存储单精度和双精度浮点数。了解如何在源码级别获取这两种类型的最大和最小值对于编写高效且精确的代码至关重要。本文将深入探讨Java中获取浮点数...

    java之java类型转换

    Java 中的简单类型包括 boolean、byte、char、short、int、long、float、double 和 void 八种类型,每种类型都有其对应的封装器类,如 Boolean、Byte、Character、Short、Integer、Long、Float、Double 和 Void。...

    Java BigDecimal和double示例及相关问题解析

    在 Java 中,浮点数的表示形式有多种,包括 float 和 double 等,但是这些类型在进行计算时会出现精度问题,而 BigDecimal 则可以解决这种问题。本文将主要介绍 Java 中的 BigDecimal 和 double 的示例及相关问题...

    Java基本类型转换.doc

    数值型又分为整型(byte、short、int、long)和浮点型(float、double)。在转换过程中,遵循从低精度到高精度的自动转换和从高精度到低精度的强制转换。 - 自动类型转换:较低精度的类型可以直接赋值给较高精度的...

    Java基础知识笔试题及答案

    Java 中的封装类有 Double、Integer、Float、Byte、Long、Character、Short 和 Boolean 等类。 十、Java 程序设计 Java 程序设计是指使用 Java 语言设计和实现程序的过程,包括设计类、方法和变量,使用控制结构和...

Global site tag (gtag.js) - Google Analytics