java中数值计算的问题

今天使用javatodo的时候发现了一个问题:1.0-0.9=0.09999999999999998 这究竟是怎么回事,询问了几个人以后才知道原来这不是javatodo的问题,而是java的问题。
float和double类型执行二进制浮点运算,所以它们的计算结果并不完全正确,所以在需要精确计算的场合不能使用它们。
那么对于这种情况使用哪种类型最合适呢?使用BigDecimal类型最为合适。
例如:BigDecimal reBigDecimal = new BigDecimal("1").subtract(new BigDecimal("0.9909090909090"));
System.out.print(reBigDecimal);
输出结果:0.0090909090910

时间: 2024-08-04 05:24:16

java中数值计算的问题的相关文章

Java中BigDecimal的8种舍入模式是怎样的

Java中BigDecimal的8种舍入模式是怎样的?下面长沙欧柏泰克软件学院和大家一起来学习下吧:  java.math.BigDecimal 不可变的.任意精度的有符号十进制数.BigDecimal 由任意精度的整数非标度值和32位的整数标度(scale)组成. 如果为零或正数,则标度是小数点后的位数.如果为负数,则将该数的非标度值乘以10的负scale次幂. 因此,BigDecimal表示的数值是(unscaledValue × 10-scale). 与之相关的还有两个类: java.ma

细谈JAVA中的数据类型

Java数据类型简介: Java是一种强类型的语言,数值类型主要分为基本数据类型和引用数据类型,其中基本的数据类型分为8种,具体细节点及一些注意点如下. java中的基本数据类型: 字符类型: 关键字:char  所占字节:2字节细节点:1.java中的字符类型采用Unicode编码,加之2字节,因此java中的数据类型可以直接存储一个汉字,例如:char sex = '男';注意点:1.声明字符类型时用的是单引号' ',而不是双引号""; 2.其实在正常开发中,绝大多数汉字所占的字节

JAVA中一些需要记录的知识点(基础部分)

为了准备一年以后的校招,开始重头在复习一遍JAVA,为了方便初学者或者其他在整理基础知识的朋友,发个日志,欢迎讨论,并指出错误,谢谢! JDK与JRE的区别: JRE是所有JAVA程序运行所需要的环境,任何JAVA程序的运行都依赖于JRE,当前从JAVA官网选择安装JAVA即安装的是JRE. JDK是为开发人员所提供的工具包,对开发人员来说属于必备项,一般在JDK本身包含JRE,但是一般JDK还会再安装一套JRE,这一套JRE被成为公共JRE(如图),JDK需要从oracle的官网下载. 当前的

java中的浮点计算

记得很久以前编写测试用例,无意间发现 double c=2.31;double d=0.1; System.out.println(c/d); 最后输出的竟然是23.099999999999998,而不是简单的23.1,很明显,这样的结果很多情况下会出问题,而使用window计算器软件,却能够得到正确结果,很是不解.今天看到了精确计算的方法,特此记录. 转载自:http://blog.csdn.net/hjxhjh/article/details/6025442 今天在数值计算时碰到一个问题.程

java中的三元运算符详解

最近在带领实习生中遇到很多新手问与三元运算符有关的java题目,多数为代码结果题,少数为应用题.鉴于很多资料上对于java三元运算的讲解过于简单,网上的资料与题目也不是很完善,对于结果答案分析不一,故在此总结,当然仅为个人观点,水平有限,不足之处,还请大家多多指出,互相交流学习. 什么是java三元运算符呢?无疑其操作元有三个,第一个是条件表达式,剩余两个为值,条件表达式为真时运算取第一个值,为假时取第二个值. 其示例代码如下:boolean a = 20 < 45 ? true : false

java中BigDecimal的学习

干着java的活,但是看的都是一些偏底层的东西(或者我根本就没有看),有点荒废了java的学习. 最近一直在用到一个类是BigDecimal,但都是模棱两可地在那儿用,并没有深入研究这个类的细节,感觉不能再拖了. BigDecimal,从名字来看就是进行大数运算的,不光这样,还广泛用于小数的精确运算. 当你接触到和钱有关的计算的时候,这个类还是很有用滴. 先来看一个例子 1 package com.tuhooo.bigdecimal; 2 3 /** 4 * Created by tuhooo

Java 中几个重要的关键字

Java中的关键字特别多,大致如下: 访问控制 private protected public 类,方法和变量修饰符 abstract class extends final implements interface native new static strictfp synchronized transient volatile 程序控制 break continue return do while if else for instanceof switch case default 异常

深入剖析Java中的装箱和拆箱

阅读目录 一.什么是装箱?什么是拆箱?二.装箱和拆箱是如何实现的三.面试中相关的问题 自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题.本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱.拆箱相关的问题. 回到顶部 一.什么是装箱?什么是拆箱? 我们知道 Java为每种基本数据类型都提供了对应的包装器类型,至于为什么会为每种基本数据类型提供包装器类型在此不进行阐述,有兴趣的朋友可以查阅相关资料.在Java SE5之前,如果要生成

JAVA中只有值传递

今天,我在一本面试书上看到了关于java的一个参数传递的问题: 写道 java中对象作为参数传递给一个方法,到底是值传递,还是引用传递? 我毫无疑问的回答:"引用传递!",并且还觉得自己对java的这一特性很是熟悉! 结果发现,我错了! 答案是: 值传递!Java中只有按值传递,没有按引用传递! 回家后我就迫不及待地查询了这个问题,觉得自己对java这么基础的问题都搞错实在太丢人! 综合网上的描述,我大概了解了是怎么回事,现在整理如下,如有不对之处望大神提出! 先来看一个作为程序员都熟