精华内容
下载资源
问答
  • //0.8999999999999999上面的计算出的结果不是 0.9,而是一连串的小数。问题在于1.1这个数字不能被精确表示为一个double,因此它被表示为最接近它的double值,该程序从2减去的就是这个值,但这个计算的结果并不是最...

    小数精确计算

    System.out.println(2.00 -1.10);//0.8999999999999999

    上面的计算出的结果不是 0.9,而是一连串的小数。问题在于1.1这个数字不能被精确表示为一个double,因此它被表

    示为最接近它的double值,该程序从2中减去的就是这个值,但这个计算的结果并不是最接近0.9的double值。

    一般地说,问题在于并不是所有的小数都可以用二进制浮点数精确表示。

    二进制浮点对于货币计算是非常不适合的,因为它不可能将1.0表示成10的其他任何负次幂。

    解决问题的第一种方式是使用货币的最小单位(分)来表示:

    System.out.println(200-110);//90

    第二种方式是使用BigDecimal,但一定要用BigDecimal(String)构造器,而千万不要用 BigDecimal(double)来构造(也不能将float或double型转换成String再来使用BigDecimal(String)来构造,因为在将float或double转换成String时精度已丢失)。

    例如new BigDecimal(0.1),

    它将返回一个BigDecimal,

    也即0.1000000000000000055511151231257827021181583404541015625,

    正确使用BigDecimal,程序就可以打印出我们所期

    望的结果0.9:

    System.out.println(new BigDecimal("2.0").subtract(new BigDecimal("1.10")));// 0.9

    另外,如果要比较两个浮点数的大小,要使用BigDecimal的compareTo方法。

    原文:https://www.cnblogs.com/stevehu1231/p/9753956.html

    展开全文
  • Java中小数精确计算

    2018-10-08 14:00:00
    Java中小数精确计算 小数精确计算 System.out.println(2.00 -1.10);//0.8999999999999999 上面的计算出的结果不是 0.9,而是一连串的小数。问题在于1.1这个数字不能被精确表示为一个double,...

    Java中小数精确计算

    小数精确计算

    System.out.println(2.00 -1.10);//0.8999999999999999

     

    上面的计算出的结果不是 0.9,而是一连串的小数。问题在于1.1这个数字不能被精确表示为一个double,因此它被表

    示为最接近它的double值,该程序从2中减去的就是这个值,但这个计算的结果并不是最接近0.9的double值。


    一般地说,问题在于并不是所有的小数都可以用二进制浮点数精确表示。


    二进制浮点对于货币计算是非常不适合的,因为它不可能将1.0表示成10的其他任何负次幂。


    解决问题的第一种方式是使用货币的最小单位(分)来表示:

    System.out.println(200-110);//90

     

    第二种方式是使用BigDecimal,但一定要用BigDecimal(String)构造器,而千万不要用 BigDecimal(double)来构造(也不能将float或double型转换成String再来使用BigDecimal(String)来构造,因为在将float或double转换成String时精度已丢失)。
    例如new BigDecimal(0.1),
    它将返回一个BigDecimal,
    也即0.1000000000000000055511151231257827021181583404541015625,
    正确使用BigDecimal,程序就可以打印出我们所期

    望的结果0.9:

    System.out.println(new BigDecimal("2.0").subtract(new BigDecimal("1.10")));// 0.9

     

    另外,如果要比较两个浮点数的大小,要使用BigDecimal的compareTo方法。

    posted @ 2018-10-08 14:00 灬Silence灬 阅读(...) 评论(...) 编辑 收藏
    展开全文
  • //0.8999999999999999上面的计算出的结果不是 0.9,而是一连串的小数。问题在于1.1这个数字不能被精确表示为一个double,因此它被表示为最接近它的double值,该程序从2减去的就是这个值,但这个计算的结果并不是最...

    小数精确计算

    System.out.println(2.00 -1.10);//0.8999999999999999

    上面的计算出的结果不是 0.9,而是一连串的小数。问题在于1.1这个数字不能被精确表示为一个double,因此它被表

    示为最接近它的double值,该程序从2中减去的就是这个值,但这个计算的结果并不是最接近0.9的double值。

    一般地说,问题在于并不是所有的小数都可以用二进制浮点数精确表示。

    二进制浮点对于货币计算是非常不适合的,因为它不可能将1.0表示成10的其他任何负次幂。

    解决问题的第一种方式是使用货币的最小单位(分)来表示:

    System.out.println(200-110);//90

    第二种方式是使用BigDecimal,但一定要用BigDecimal(String)构造器,而千万不要用 BigDecimal(double)来构造(也不能将float或double型转换成String再来使用BigDecimal(String)来构造,因为在将float或double转换成String时精度已丢失)。

    例如new BigDecimal(0.1),

    它将返回一个BigDecimal,

    也即0.1000000000000000055511151231257827021181583404541015625,

    正确使用BigDecimal,程序就可以打印出我们所期

    望的结果0.9:

    System.out.println(new BigDecimal("2.0").subtract(new BigDecimal("1.10")));// 0.9

    另外,如果要比较两个浮点数的大小,要使用BigDecimal的compareTo方法。

    展开全文
  • 6.7.3 知识拓展:在Java中实现小数的精确计算我们在编写Java程序的时候,可能经常需要用到小数,例如,给某个厂商编写一个采购平台,需要计算货物的价格等。现在假设有两个商品,价格分别为0.05元和0.01元,需要计算...

    6.7.3  知识拓展:在Java中实现小数的精确计算

    我们在编写Java程序的时候,可能经常需要用到小数,例如,给某个厂商编写一个采购平台,需要计算货物的价格等。

    现在假设有两个商品,价格分别为0.05元和0.01元,需要计算这两个商品的价格的和,并且将它打印出来。我们可以编写如下的代码:System.out.println(0.05+0.01);

    但是,当你执行上面的代码时,将会得到下面的输出:0.060000000000000005

    显然,这个输出并不是我们所期望的结果。为什么会出现这样的情况呢?这是因为计算机中的数字表示的方式原因(所有的数值都需要转换成二进制数),0.05不能被精确表示为一个double(默认情况下,小数类型数据为double类型)类型数据,而是被表示为最接近它的double值。因此,对于需要精确运算结果的地方,请勿使用double或者float类型的数据来表示。要实现数值的精确运算,有两种选择:使用int或者long类型数据,得到最后结果后,再除以适当的10的倍数,来获得精确的小数。或者使用BigDecimal来进行精确的小数运算。对于int或者long类型数据的运算,在此不再赘述,本节主要讨论如何使用BigDecimal进行精确的小数运算。

    BigDecimal位于java.math包中,它有4个构造器,其中,有两个接收BigInteger参数,而我们要用的是使用String或者double类型参数的构造器,但是,基于上面的理由,不要使用double类型参数的构造器来构造BigDecimal对象,而要使用String类型参数的构造器。在这个类上定义了很多进行加减乘除运算的方法:add()、subtract()、multiply()、divide(),另外还有进行小数点移位运算的movePointLeft()和movePointRight()等。

    我们来看一个使用BigDecimal来实现精确运算小数的例子。

    源文件:TestFloat.javaimport java.math.BigDecimal;

    public class TestFloat{

    public static void main(String args[]){

    //直接使用double类型数据进行运算

    System.out.println(0.05+0.01);

    //使用BigDecimal的double参数的构造器

    BigDecimalbd1=newBigDecimal(0.05);

    BigDecimalbd2=newBigDecimal(0.01);

    System.out.println(bd1.add(bd2));

    //使用BigDecimal的String参数的构造器

    BigDecimalbd3=newBigDecimal("0.05");

    BigDecimalbd4=newBigDecimal("0.01");

    System.out.println(bd3.add(bd4));

    }

    }

    编译运行这个程序,可以得到如下输出:0.060000000000000005

    0.06000000000000000298372437868010820238851010799407958984375

    0.06

    从这个例子中可以看出,如果使用double类型参数的构造器来获得BigDecimal对象进行运算,也可能得不到想要的结果,而如果使用String参数的构造器来获得BigDecimal,将可以得到正确的运算结果。

    【责任编辑:book TEL:(010)68476606】

    点赞 0

    展开全文
  • 今天就来带大家了解下java基础知识,在java中如何精确计算小数并且通过实际代码来为大家展示。首先,我们需要知道是,java在计算浮点数时候,因为二进制没有办法精确地表示0.1值,这就像是十进制没有办法...
  • float、double类型的问题我们都知道,计算机是使用二进制存储数据的。而平常生活,大多数情况下我们...我们先来看看十进制小数转二进制小数的方法对小数点以后的数乘以2,会得到一个结果,取结果的整数部分(不是1...
  • 项目会经常用到小数的计算。很多人第一感觉会想尝试使用float或者double,然而在精准计算,例如金钱计算,使用float或者double来计算会出现意想不到后果。如图所示:并没有得到预期的0.05。出现原因分析:Java...
  • //0.8999999999999999上面的计算出的结果不是0.9,而是一连串的小数。问题在于1.1 这个数字不能被精确表示为一个double,因此它被表示为最接近它的double 值,该程序从2 减去的就是这个值,但这个计算的结果并不是...
  • System.out.println(0.09 + 0.01); System.out.println(1.0-0.32); System.out.println(1.015 * 100); System.out.println(1.301 / 100); 输出结果是: ... 如果不进行加减直接输出小数为什么不会变
  • 例如,当您键入22和56时,此代码可以正常工作,它显示正确结果import java.util.Scanner;class apples{public static void main(String args[]){Scanner villy = new Scanner (System.in);double fnum, snum, answer;...
  • JAVA基础之小数的计算

    2020-10-24 21:15:40
    例如:java中的float类型,占用32位,1位表示符号,8位表示1.几中几,后面23位表示10^n次方中n,所以1.0f-0.9f和0.9f-0.8f结果都是一个很接近0.1数,并不相等 2.使用小数时注意事项:计算和比较和保留小数...
  • 同样,大多数开发人员也容易忽略java.math.BigDecimal 所提供任意精度的小数 ―大多数应用程序不使用它们。然而,在以整数为主程序有时确实会出人意料地需要表示非整型数据。例如,JDBC使用 B...
  • java小数计算

    千次阅读 2019-02-24 21:19:51
    有些人知道Java中double类型与float类型精度不同,计算时精度会发生丢失甚至错误。 我也知道小数使用double与float会造成精度问题,但是一直都没有关心到底应该如何解决,最近工作中碰到了一个上千万的小数计算,...
  • Java中如何精确计算小数

    千次阅读 2017-02-20 21:52:42
    当用程序计算小数时,往往是不精确,就像是三分之一只能近似表示为0.3333333333…无法精确表示,计算机计算也是同样道理。...Java中提供了BigDecimal类来精确计算,代码示例如下: 运行结果如下:
  • Java中实现小数的精确计算

    千次阅读 2015-10-10 15:07:15
    为此,Java提供了BigDecimal来解决不精确问题。但是需要注意是,我们需要选择使用String参数构造器,才能保证更高精确。import java.math.BigDecimal; public class TestFloat { /** * @param args */ pu
  • 我测试时候是259),得到结果却是51.80000000000000004这么个结果,当时直接蒙逼,根本不知道什么原因,随手在java中写了一个System.out.println(259*0.2),得到一样结果;这个时候觉得就不是数据类型问题了,...
  • java 小数精确计算

    2016-10-25 14:53:00
    7 上面的计算出的结果不是 0.9,而是一连串的小数。问题在于1.1这个数字不能被精确表示为一个double,因此它被表 8 9 示为最接近它的double值,该程序从2减去的就是这个值,但这个计算的结果...
  • java Math小数计算

    2017-01-20 17:53:46
    我们都知道java的math类封装了很多有用方法,当然最常用大概是round,四舍五入 对于小数除法我做了一组测试:1080/1440 1080/1440 = 0.0 value/1440.0 = 0.75; (double)value/1440=0.75; (double)value...
  • 242) at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70) 所以需要传入 divide 方法第二个参数(保留的小数位数),第三个参数选传(保留方法)。 保留方法总结如下: 常量名 说明 ...
  • BigInteger:可以实现大整数计算构造方法:BigInteger(String val)注意:寻常Integer是有着明确数字上限,它数值上限是2147483647。因此,如果需要表示超过此数值,则应该使用BigInteger作为数据类型。...
  • 使用BigDecimal对小数进行精确计算,在构造BigDecimal时最好用String类型构造
  • [Java教程]Java中的高精度整数和高精度小数0 2017-08-14 09:00:18在实际编码中,会遇到很多高精度事例,比如,在计算金钱时候就需要保留高精度小数,这样计算才不会有太大误差:在下面代码中,我们验证了,当...
  • javascript的小数点乘法除法实例导语:想要学好Java语言,必不可少的就是它的四则运算,特别是乘除法。下面的是百分网小编为大家...js在处理小数的乘除法的时候有一个bug,解决的方法可以是:将小数变为整数来处理。...
  • float、double类型的问题我们都知道,计算机是使用二进制存储数据的。而平常生活,大多数情况下我们...我们先来看看十进制小数转二进制小数的方法对小数点以后的数乘以2,会得到一个结果,取结果的整数部分(不是1...
  • float、double类型的问题我们都知道,计算机是使用二进制存储数据的。而平常生活,大多数情况下我们...我们先来看看十进制小数转二进制小数的方法对小数点以后的数乘以2,会得到一个结果,取结果的整数部分(不是1...
  • 我测试时候是259),得到结果却是51.80000000000000004这么个结果,当时直接蒙逼,根本不知道什么原因,随手在java中写了一个System.out.println(259*0.2),得到一样结果;这个时候觉得就不是数据类型问题了,...
  • Java精确计算小数

    千次阅读 2019-04-24 11:41:57
    Java计算浮点数时候,由于二进制无法精确表示0.1值(就好比十进制无法精确表示1/3一样),所以一般会对小数格式化处理. 但是如果涉及到金钱项目,一点点误差都不能有,必须使用精确运算时候,就可以使用...
  • Java 小数精确计算问题

    千次阅读 2010-04-28 13:12:00
    //0.8999999999999999上面的计算出的结果不是0.9,而是一连串的小数。问题在于1.1 这个数字不能被精确表示为一个double,因此它被表示为最接近它的double 值,该程序从2 减去的就是这个值,但这个计算的结果并不是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,055
精华内容 422
关键字:

java中小数的计算

java 订阅