`
wwwlyxwww
  • 浏览: 35055 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

JAVA中控制double和float的精度 (转)

阅读更多

/**
  * 测试用的main方法.
  *
  * @param argc
  * 运行参数.
  */
  public static void main(String[] argc) {
  //下面都以保留2位小数为例
  //ROUND_UP
  //只要第2位后面存在大于0的小数,则第2位就+1
  System.out.println(round(12.3401,2,BigDecimal.ROUND_UP));//12.35
  System.out.println(round(-12.3401,2,BigDecimal.ROUND_UP));//-12.35
  //ROUND_DOWN
  //与ROUND_UP相反
  //直接舍弃第2位后面的所有小数
  System.out.println(round(12.349,2,BigDecimal.ROUND_DOWN));//12.34
  System.out.println(round(-12.349,2,BigDecimal.ROUND_DOWN));//-12.34
  //ROUND_CEILING
  //如果数字>0 则和ROUND_UP作用一样
  //如果数字<0 则和ROUND_DOWN作用一样
  System.out.println(round(12.3401,2,BigDecimal.ROUND_CEILING));//12.35
  System.out.println(round(-12.349,2,BigDecimal.ROUND_CEILING));//-12.34
  //ROUND_FLOOR
  //如果数字>0 则和ROUND_DOWN作用一样
  //如果数字<0 则和ROUND_UP作用一样
  System.out.println(round(12.349,2,BigDecimal.ROUND_FLOOR));//12.34
  System.out.println(round(-12.3401,2,BigDecimal.ROUND_FLOOR));//-12.35
  //ROUND_HALF_UP [这种方法最常用]
  //如果第3位数字>=5,则第2位数字+1
  //备注:只看第3位数字的值,不会考虑第3位之后的小数的
  System.out.println(round(12.345,2,BigDecimal.ROUND_HALF_UP));//12.35
  System.out.println(round(12.3449,2,BigDecimal.ROUND_HALF_UP));//12.34
  System.out.println(round(-12.345,2,BigDecimal.ROUND_HALF_UP));//-12.35
  System.out.println(round(-12.3449,2,BigDecimal.ROUND_HALF_UP));//-12.34
  //ROUND_HALF_DOWN
  //如果第3位数字>=5,则做ROUND_UP
  //如果第3位数字<5,则做ROUND_DOWN
  System.out.println(round(12.345,2,BigDecimal.ROUND_HALF_DOWN));//12.35
  System.out.println(round(12.3449,2,BigDecimal.ROUND_HALF_DOWN));//12.34
  System.out.println(round(-12.345,2,BigDecimal.ROUND_HALF_DOWN));//-12.35
  System.out.println(round(-12.3449,2,BigDecimal.ROUND_HALF_DOWN));//-12.34
  //ROUND_HALF_EVEN
  //如果第3位是偶数,则做ROUND_HALF_DOWN
  //如果第3位是奇数,则做ROUND_HALF_UP
  System.out.println(round(12.346,2,BigDecimal.ROUND_HALF_EVEN));//12.35
  System.out.println(round(12.345,2,BigDecimal.ROUND_HALF_EVEN));//12.35
  }
  }

分享到:
评论

相关推荐

    Java 精确计算-double-float-String

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

    详解java中float与double的区别

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

    java-16进制4字节转Float

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

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

    2. **MODBUS中的32位转浮点型(float)** MODBUS协议中,32位数据可以用于表示一个浮点数。根据IEEE 754标准,浮点数的32位表示由8位符号位、8位指数位和23位尾数组成。转换时,需要解码这32位数据并按照标准进行计算...

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

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

    float和double

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

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

    下面我们将详细探讨Java中的数值范围、float和double类型的精度问题,并且提供解决方案。 一、Java中的数值范围 Java中的基本数据类型有多种,包括整数类型(int、long)、浮点数类型(float、double)。每种类型...

    float、double类型介绍.zip

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

    Java实现IEE754 Float类型数据

    本文将详细探讨如何使用Java语言来实现IEEE 754标准中的单精度浮点数(Float)的解析过程。 #### IEEE 754标准简介 IEEE 754标准定义了浮点数的二进制格式以及运算规则。对于单精度浮点数来说,它占用32位(4字节...

    单双精度转十六进制.zip

    本话题主要关注单精度(float)和双精度(double)浮点数与十六进制之间的转换,这对于理解和调试程序,尤其是在处理数值计算或内存表示时,是非常重要的。 单精度浮点数(float)是32位的二进制格式,按照IEEE 754...

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

    总的来说,理解和处理Java与MySQL中的小数问题,关键在于选择合适的数据类型、控制精度并适当地进行运算处理,以确保数据的准确性和一致性。在开发过程中,应充分考虑这些因素,以避免潜在的精度误差和数据不一致...

    单精度&双精度浮点数与十六进制数相互转换

    例如,在Python中,可以使用`float.hex()`和`float.fromhex()`方法实现这一过程。 理解这些转换机制对编程和数据分析非常重要,特别是在处理数值精度和内存效率时。例如,在存储和传输大量浮点数据时,有时会将它们...

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

    本文主要探讨了浮点类型数据,即float和double在内存中的表示方式,以及由此产生的精度问题。 首先,浮点类型数据有两种主要形式:单精度(float)和双精度(double)。float在内存中占用32位,而double占用64位。这...

    Java中几种常用数据类型之间转换的方法

    在 Java 中,可以使用 parseInt()、parseFloat()、parseLong() 和 parseDouble() 方法将 String 类型的变量转换为 int、float、long 和 double 类型的变量。例如: String intstring = "10"; String floatstring = ...

    Java基本类型转换.doc

    - 时间日期类型转换:在处理日期和时间时,Java提供了java.util.Date类和java.time包(Java 8及以上版本)中的类。例如,可以使用SimpleDateFormat将日期字符串转换为Date对象,反之亦然。 总之,Java中的数据类型...

    java之java类型转换

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

    关于java的数值精度

    java程序中数值的精度问题,float、double容易产生精度数值问题,不适合精度计算,而bigdecimal正好解决这一问题

    Java中各个数据类型之间的转换

    原始类型包括布尔型(boolean)、字符型(char)、整型(byte、short、int、long)和浮点型(float、double),而引用类型主要指的是对象,如String和Date等。 1. 自动类型转换(隐式转换) 自动类型转换发生在...

    JAVA数据类型转换.pdf

    Java提供了六个包装类用于表示简单数据类型:`Boolean`、`Character`、`Integer`、`Long`、`Float`和`Double`。这些包装类可以作为中介来进行类型转换。例如,将`float`类型的变量转换为`double`类型: ```java ...

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

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

Global site tag (gtag.js) - Google Analytics