美文网首页
JAVA浮点类型数据计算

JAVA浮点类型数据计算

作者: JackWee_Yao | 来源:发表于2017-02-21 23:01 被阅读0次

摘要

Java浮点数据类型在内存中存储会出现精度丢失的情况,因此涉及浮点数据类型的计算需使用BigDecimal类及相关方法。

背景

前几天遇到了一个浮点数精度处理的问题,简单地说就是把String转化为Double然后乘以精度,最后以int输出,代码如下:

    public int getThreshInt(String thresh, int fractionDigits)
    {
        return (int) (Double.parseDouble(thresh) * Math.pow(10, fractionDigits));
    }

经测试发现,当输入为1.001时,输出为1000。可见,在该方法处理的过程中出现了精度丢失问题。

分析

为了进一步明确问题所在,测试代码如下:

    System.out.println(1.001 * 1);
    System.out.println(1.001 * 10);
    System.out.println(1.001 * 100);
    System.out.println(1.001 * 1000);
    System.out.println(1.001 * 10000);

输出结果为

1.001
10.009999999999998
100.1
1000.9999999999999
10009.999999999998

由此可以确定:采用基本类型进行浮点数运算会出现精度丢失的情况。

解决方法

后经查阅相关资料发现,对于上述情况需借助BigDecimal类及相应方法,正确的解决步骤为:

1.调用BigDecimal(String)将基本类型转化为BigDecimal类型;
2.采用BigDecimal的相关方法进行计算;
3.将结果转化为以期望的数据类型输出;

重写该方法,代码如下:

    public int getThreshInt(String thresh, int fractionDigits)
    {
        return new BigDecimal(thresh).multiply(
        new BigDecimal(Math.pow(10, fractionDigits))).intValue();
    }

相关文章

  • JAVA浮点类型数据计算

    摘要 Java浮点数据类型在内存中存储会出现精度丢失的情况,因此涉及浮点数据类型的计算需使用BigDecimal类...

  • Java学习笔记-1.6.4浮点型变量及常量

    带小数的数据在Java中称为浮点型。浮点型可分为float类型和double类型。 浮点型数据类型表数范围类型占用...

  • 七:Java基础入门-浮点类型

    1:浮点类型概述 浮点类型用于表示小数的数据类型。 浮点类型原理:也就是二进制科学级数法。 Java的浮点类型有f...

  • Java基本数据类型——浮点数、char类型和布尔类型

    Java中的基本数据类型除了四种整型外,还有两种浮点类型、一种char类型和一种布尔类型。 Java中的浮点类型 ...

  • Java入门:数据类型

    Java数据分类两大类型: 基本数据类型 引用数据类型 基本数据类型 整数类型 字符类型 浮点类型 布尔类型 引用...

  • Java中的一些基础知识点整理

    Java中的数据类型: 基本数据类型:整数: byte, short, int(default), long浮点数...

  • 数据类型

    Java 数据类型 primitive 主数据类型包括整数、布尔和浮点数。boolean: true / fals...

  • C语言基础

    数据类型 基本数据类型 java基本数据类型 浮点型 字符型 boolean true/false C的基本数据类...

  • 安卓Intent

    Intent可以传递哪些类型数据 java基本数据类型:整型,浮点,字符,布尔 String 实现了Seriali...

  • Java比较浮点数的正确方式

    今天在读《Java开发手册》时,看到浮点数的等值判断问题「浮点数的基本数据类型不能用 == 比较,包装数据类型不能...

网友评论

      本文标题:JAVA浮点类型数据计算

      本文链接:https://www.haomeiwen.com/subject/rghpwttx.html