`
ld362093642
  • 浏览: 66905 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

JAVA中如何对double或者float的浮点数进行精度计算长度控制

阅读更多
★★★ 本篇引用转载自:《 http://stephen830.iteye.com/blog/260776 》 ★★★
感谢博主
本篇介绍了在JAVA中如何对double或者float的浮点数进行精度计算,在JAVA中提供了多种参数来实现精度的不同控制方式。具体例子如下: 


package com.soft4j.utility;

import java.math.BigDecimal;

/**
 * 与小数位精度(四舍五入等)相关的一些常用工具方法.
 * 
 * float/double的精度取值方式分为以下几种: <br>
 * java.math.BigDecimal.ROUND_UP <br>
 * java.math.BigDecimal.ROUND_DOWN <br>
 * java.math.BigDecimal.ROUND_CEILING <br>
 * java.math.BigDecimal.ROUND_FLOOR <br>
 * java.math.BigDecimal.ROUND_HALF_UP<br>
 * java.math.BigDecimal.ROUND_HALF_DOWN <br>
 * java.math.BigDecimal.ROUND_HALF_EVEN <br>
 * 
 * @author stephen
 * @version 1.0.0
 */
public final class RoundTool {

    /**
     * 对double数据进行取精度.
     * <p>
     * For example: <br>
     * double value = 100.345678; <br>
     * double ret = round(value,4,BigDecimal.ROUND_HALF_UP); <br>
     * ret为100.3457 <br>
     * 
     * @param value
     *            double数据.
     * @param scale
     *            精度位数(保留的小数位数).
     * @param roundingMode
     *            精度取值方式.
     * @return 精度计算后的数据.
     */
    public static double round(double value, int scale, int roundingMode) {
        BigDecimal bd = new BigDecimal(value);
        bd = bd.setScale(scale, roundingMode);
        double d = bd.doubleValue();
        bd = null;
        return d;
    }

    /**
     * 测试用的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-16进制4字节转Float

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

    Java中变量类型及其字节长度.docx

    ### Java中变量类型及其字节长度详解 #### 一、变量定义与分类 在Java编程语言中,**变量**是一个非常基础且重要的概念。简单来说,变量是一个由标识符定义的数据项,它主要包括三个组成部分:类型、名称以及值。...

    java精度计算代码 java指定精确小数位

    在Java编程语言中,进行精度计算时,我们经常会遇到浮点数运算导致的精度丢失问题。这是因为Java中的float和double类型是基于IEEE 754标准的,它们无法精确表示所有的小数。为了确保计算结果的精确性,我们需要使用`...

    java基础,进制转换.pdf

    - float和double分别占用四个和八个字节,用于表示浮点数。 - char占用两个字节,表示范围为0到65535,用于表示单个字符。 通过这些详细知识点,我们可以充分理解Java基础中的数据类型、进制转换、以及与之相关的...

    mysql与oracle数据类型对应关系.docx

    - `FLOAT`: 浮点数,Oracle 中有 `FLOAT (24)`,Java 中使用 `java.lang.Float`。 - `INT`: 存储整数,对应 Oracle 的 `NUMBER(10,0)`,Java 中使用 `java.lang.Integer`。 - `LONGBLOB`: 用于存储大对象,与 ...

    Introduction to java programming

    - `Double.parseDouble(string)`: 字符串转双精度浮点数 - `Arrays.sort(type[] list)`: 排序数组 - `Arrays.binarySearch(type[] list, type key)`: 二分查找 #### 十二、数组 数组是一种存储同类型元素的数据...

    java中关于变量的练习题及答案

    - 不能使用Java中的关键字或者保留字作为标识符。 - 字母大小写敏感。 - 名称应具有一定的意义,便于他人阅读理解。 - 根据以上规则,“lname”, “_int”, “$25”是合法的变量名。 - “Ab?1”、“@abc”、...

    高精度 加减乘除 代码

    在IT领域,高精度计算(High Precision Arithmetic)是处理大整数或浮点数时,为了保持数值计算的精确性而采用的一种技术。通常,计算机的内置数据类型(如int、float、double)都有其计算精度限制,对于超出这个...

    java代码-2. 编程实现给出5个双精度浮点数(1.1,2.2,3.3,4.4,5.5),求和,再求平均数。

    1. **双精度浮点数(double)**: Java中的`double`数据类型用于存储双精度浮点数,它提供了比单精度浮点数(float)更高的精度,通常用于科学计算或需要精确结果的场景。双精度浮点数占据8字节(64位)的内存空间。 ...

    全国计算机等级考试二级Java语言程序设计试题及答案四.pdf

    1. Java基础语法和基本数据类型:文件中提到了基本数据类型如float、double、byte、char等。Java定义了八种基本类型,每种类型的大小和值范围都是固定的。例如,int类型占用4个字节,表示整数。float类型占用4个字节...

    JAVA程序的基本结构

    赋值语句还可以使用关系表达式、逻辑表达式来进行复杂的计算。 #### 四、控制流语句 控制流语句用于控制程序的执行流程,常见的有: - **打印语句**:用于输出结果到控制台或其他输出设备。 ```java System....

    accp 5.0使用Java语言理解程序逻辑

    - `float`:32位长度的浮点数,适合存储精度不是特别高的小数。 - `double`:64位长度的浮点数,用于存储高精度的小数。 3. **字符型数据(Characters):** - `char`:16位长度的Unicode字符,用于存储单个字符...

    java彻底理解bytecharshortintfloatlongdouble.doc

    2. `double`: 占用8个字节(64位),提供双精度浮点数,具有更高的精度和更大的取值范围,是Java中的默认浮点类型。 在表示浮点数时,可以使用后缀`f`或`F`指定`float`,如`3.14f`,否则默认为`double`类型,如`...

    java面试题大全好多经典的试题

    因为3.4是双精度浮点数(double),而`float`类型的变量应该赋值为单精度浮点数。正确的写法应该是: ```java float f = (float)3.4; ``` **5. float f = 1.3 是否正确?** 同样不正确。原因同上,应该显式转换...

    Java虚拟机规范SE8英文

    - **Java虚拟机浮点运算**:遵循IEEE 754标准,提供单精度(float)和双精度(double)两种浮点数类型。 - **模式**:Java虚拟机支持两种浮点模式,即默认模式和非标准模式。 - **值集转换**:在不同的浮点模式之间...

    Java开发编码规范手册

    **Double (双精度浮点数)**:Java中的double类型是一种浮点数类型,占用8个字节(64位)的存储空间,比float类型能表示更精确的小数点后数值。 **Char (字符型)**:Java中的char类型是一种字符类型,占用2个字节(16位...

    java考试复习资料

    ### Java考试复习资料详解 #### 一、架构模式:B/S与C/S - **B/S架构**(Browser/Server,浏览器/服务器)是一种通过Web浏览器进行访问的应用系统架构。客户端只需要一个Web浏览器即可,无需安装任何软件。所有的...

    JAVA解惑.pdf

    - 避免使用 `double` 或 `float` 类型进行货币计算。 - 使用 `BigDecimal` 可以确保计算的准确性。 通过以上分析,我们可以了解到,在Java编程过程中,需要注意取余运算符在处理负数时的特性以及浮点数表示上的...

    java笔记 课堂笔记

    - **`float`**:占用32位,表示单精度浮点数。 - **`double`**:占用64位,表示双精度浮点数。`double`类型比`long`更精确,适合科学计算。 3. **字符型** - **`char`**:占用16位,用于存储单个字符。可以使用...

    Java中使用BigDecimal进行精确运算

    总之,BigDecimal是Java中解决浮点数精度问题的关键工具,它确保了在进行财务计算或其他需要精确数值的场景下,结果的准确性。在编写涉及到货币计算或其他需要高精度计算的代码时,应优先考虑使用BigDecimal类。

Global site tag (gtag.js) - Google Analytics