精华内容
下载资源
问答
  • double serviceability =(double)(count1+count2)/sum; 需要进行强转 除数 这样得到的值就是double类型了 转载于:https://www.cnblogs.com/wupeng88/p/4425033.html

    double serviceability =(double)(count1+count2)/sum;

    需要进行强转 除数 这样得到的值就是double类型了

    转载于:https://www.cnblogs.com/wupeng88/p/4425033.html

    展开全文
  • java中int,float,double的运算问题,BigDecimal加减乘除计算 1.两个int型数字相除,如果除数比被除数大很多,结果会为0.此时需要对其中一个数进行强制类型转换(float / double)即可输出正确结果 public static ...

    java中int,float,double的运算问题,BigDecimal加减乘除计算

    1.两个int型数字相除,如果除数比被除数大很多,结果会为0.此时需要对其中一个数进行强制类型转换(float / double)即可输出正确结果

    public static void main(String[] args){
    		
    		String a="5";
    		String b="200";
    		float d=inta/intb;//直接除
    		float d2=(float)inta/intb;//被除数强制转型float
    		float d3=inta/(float)intb;//除数强制转型float
    		float d4=(float)inta/(float)intb;//都强制转换
    		//分别输出
    		System.out.println(d);
    		System.out.println(d2);
    		System.out.println(d3);
    		System.out.println(d4);
    		
    

    在这里插入图片描述
    2.Java中的浮点数类型float和double不能够进行精确运算。这个问题有时候非常严重。比如,经过double型直接计算,1.4×1.5有时会得出2.0999999999999996的结果,但实际上,应该得到2.10。而且,类似的情况并不仅限于乘法计算。

    BigDecimal用法详解

    • Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。

    • 双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。

    • float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。

    • BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。

    • 构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。

    常用方法描述

    add(BigDecimal) BigDecimal对象中的值相加,然后返回这个对象。

    subtract(BigDecimal) BigDecimal对象中的值相减,然后返回这个对象。

    multiply(BigDecimal) BigDecimal对象中的值相乘,然后返回这个对象。

    divide(BigDecimal) BigDecimal对象中的值相除,然后返回这个对象。

    abs() BigDecimal对象中的值取绝对值,然后返回这个对象。

    toString() 将BigDecimal对象的数值转换成字符串。

    doubleValue() 将BigDecimal对象中的值以双精度数返回。

    floatValue() 将BigDecimal对象中的值以单精度数返回。

    longValue() 将BigDecimal对象中的值以长整数返回。

    intValue() 将BigDecimal对象中的值以整数返回。

    特别注意

    其实divide方法有可以传三个参数

    public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)

    第一参数表示除数, 第二个参数表示小数点后保留位数,

    第三个参数表示舍入模式,只有在作除法运算或四舍五入时才用到舍入模式,有下面这几种

     ROUND_UP           //向远离0的方向舍入;在丢弃非零部分之前始终增加数字(始终对非零舍弃部分前面的数字加1)。
     ROUND_DOWN         //向零方向舍入;在丢弃某部分之前始终不增加数字(从不对舍弃部分前面的数字加1,即截短)。
     ROUND_CEILING      //向正无穷方向舍入;如果 BigDecimal 为正,则舍入行为与 ROUND_UP 相同; 如果为负,则舍入行为与 ROUND_DOWN 相同。
     ROUND_FLOOR        //向负无穷方向舍入;如果 BigDecimal 为正,则舍入行为与 ROUND_DOWN 相同;如果为负,则舍入行为与 ROUND_UP 相同。
     ROUND_HALF_UP      //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55保留一位小数结果为1.6
     ROUND_HALF_DOWN    //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数结果为1.5
     ROUND_HALF_EVEN    //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN
     ROUND_UNNECESSARY  //计算结果是精确的,不需要舍入模式
    

    格式化及例子

    利用BigDecimal对超出16位有效数字的货币值,百分值,以及一般数值进行格式化控制。

    创建BigDecimal对象,进行BigDecimal的算术运算后,分别建立对货币和百分比格式化的引用,最后利用BigDecimal对象作为format()方法的参数,输出其格式化的货币值和百分比。

    public static void main(String[] args) {
        NumberFormat currency = NumberFormat.getCurrencyInstance(); //建立货币格式化引用 
        NumberFormat percent = NumberFormat.getPercentInstance();  //建立百分比格式化引用 
        percent.setMaximumFractionDigits(3); //百分比小数点最多3位     
        BigDecimal loanAmount = new BigDecimal("15000.48"); //贷款金额
        BigDecimal interestRate = new BigDecimal("0.008"); //利率   
        BigDecimal interest = loanAmount.multiply(interestRate); //相乘
        System.out.println("贷款金额:\t" + currency.format(loanAmount)); 
        System.out.println("利率:\t" + percent.format(interestRate)); 
        System.out.println("利息:\t" + currency.format(interest)); 
    }
    运行结果如下:
    贷款金额:    ¥15,000.48
    利率:    0.8%
    利息:    ¥120.00
    

    BigDecimal比较

    BigDecimal是通过使用compareTo(BigDecimal)来比较的

    public static void main(String[] args) {
        BigDecimal a = new BigDecimal("1");
        BigDecimal b = new BigDecimal("2");
        BigDecimal c = new BigDecimal("1");
        int result1 = a.compareTo(b);
    int result2 = a.compareTo(c);
    int result3 = b.compareTo(a);
        System.out.println(result1);
        System.out.println(result2);
        System.out.println(result3);
      
    }
    
    
    打印结果是:-1、0、1,即左边比右边数大,返回1,相等返回0,比右边小返回-1。
    
    注意不能使用equals方法来比较大小。
    
    使用BigDecimal的坏处是性能比double和float差,在处理庞大,复杂的运算时尤为明显,因根据实际需求决定使用哪种类型。
    

    总结

    (1)商业计算使用BigDecimal。

    (2)尽量使用参数类型为String的构造函数。

    (3) BigDecimal都是不可变的(immutable)的,在进行每一步运算时,都会产生一个新的对象,所以在做加减乘除运算时千万要保存操作后的值。

    展开全文
  • 之前一直以为Java中如果出现被除数为0时,只会出现抛出ArithmeticException这个异常,但是有次无意发现被除数为double时却不会抛出异常。于是就准备了一些测试用例研究一下。本人使用的JDK版本为1.8.0_162。 用例 ...

    前言

    之前一直以为Java中如果出现被除数为0时,只会出现抛出ArithmeticException这个异常,但是有次无意中发现被除数为double时却不会抛出异常。于是就准备了一些测试用例研究一下。本人使用的JDK版本为1.8.0_162

    用例

    整数类型

    被除数为byteshortintlong时,测试用例如下所示(只展示int的代码)

    	int a=1;
    	int b=0;
    	System.out.println(a/b);
    

    运行结果为

    	java.lang.ArithmeticException: / by zero
    	...此处省略堆栈信息
    

    浮点数类型

    被除数为floatdouble时,测试用例如下所示(只展示double的代码)

    	double a=1;
    	double b=0;
    	System.out.println(a/b);
    

    运行结果为

    	Infinity
    

    Infinity是无限大的意思。

    BigDecimal

    被除数为BigDecimal时,测试用例如下

    	System.out.println(BigDecimal.ONE.divide(BigDecimal.ZERO));
    

    运行结果为

    	java.lang.ArithmeticException: Division by zero
    	...此处省略堆栈信息
    

    结论

    通过一系列的测试可以得知,当运算中遇到除以0的情况时,基本类型中的整数类型和BigDecimal会直接抛出ArithmeticException。而基本类型中的浮点数类型时会返回Infinity

    关于Infinity的拓展知识

    1. Infinity其实是个double类型的常量。
    2. Infinity并不是在rt.jar中定义的。而是nashorn.jar中的jdk.nashorn.internal.objects.Global中定义的常量。其定义的源码如下:public static final double Infinity = 1.0D / 0.0;
    3. 可以直接给double类型的变量赋值,如:double d=Infinity;
    展开全文
  • 不同的基本类型之间可以相互转换: 自动类型转换(隐式类型转换):从小类型到大类型可以自动完成.类型的大小关系如下图所示: 强制转换:从大类型到小类型需要强制转换符: ...int a=100; int b=200; lo

    不同的基本类型之间可以相互转换:

    自动类型转换(隐式类型转换):从小类型到大类型可以自动完成.类型的大小关系如下图所示:


    强制转换:从大类型到小类型需要强制转换符:

    (需要转换成的类型)变量

    但这样转换可能会造成精度损失或者溢出


    强制转换时的精度丧失和溢出

    基本类型转换示例,注意强制转换时可能会造成的精度丧失和溢出

    int a=100;

    int b=200;

    long c=a+b;//自动将int转换为long

    long 1l=1024l;

    int i=(int)1l;  //需要加强制转换符由于1024在int的范围内没有产生溢出


    long l=1024L*1024*1024*4;

    int j=(int) l;//会产生溢出

    System.out.println(j);  //结果为0

    double pi=3.141592635897932384;

    float f=(float)pi; //会造成精度损失

    System.out.println(f);//结果为:3.1415927


    数值运算时的自动转换

    多种基本类型参与的表达式运算中,运算结果会自动向较大类型进行转换:

    //由于有long型的直接量参与,整个表达式结果为long

    long distance=10000*365*24*60*60*299792458l;

    //由于有double型的直接量599.0参与,整个表达式的结果为double

    double change=800-599.0;


    double persent1=80/100;

    //结果为0.0,右边都是int型数据,运算结果也为int类型,结果为0,再赋值给double型,将0转换成0.0

    double persent2=80.0/100;

    //结果为0.8,右边表达式有double型直接量参与,运算结果为double型


    byte、char、short转换为int

    byte、char、short三种类型实际存储的数据都是整数,在实际使用中遵循如下规则:

    -int直接量可以之间赋值给byte,char和short,只要不超过其表达范围

    -byte、char、short三种类型参与运算时,先一律转换成int类型再进行运算


    使用%运算符

    java算数运算符除通常的(+),减(-),乘(*),除(/)之外,还包括取模

    运算(%)和自增(++)及自减(--)运算.

    取模运算(%)意为取余数,可适用于整数,char类型以及浮点数.

    //输出255除以8所得余数

    int n=255;

    System.out.println(n%8); //结果为1


    使用"++"和"--"运算符

    java的自增运算符和自减运算符继承自C++,可以使变量的值加1或减1,但其写在

    变量前和变量后有不同的效果:

    -如果写在变量前使用表示在使用整个变量之前加1或减1

    -如果写在变量之后表示这个变量使用完之后再加1或减1


    关系运算符用于判断数据之间的大小关系,包括大于(>),小于(<),

    大于等于(>=),小于等于(<=),等于(==),不等于(!=)六个运算符

    关系运算的结果为boolean类型,关系成立为true,否则为false


    逻辑运算符

    逻辑运算符建立在关系运算的基础上,逻辑运算符包括:

    与(&&),或(||)和非(!).

    参与逻辑运算的变量或表达式都是boolean类型,运算结果也为

    boolean类型,逻辑运算规则如下表所示:

    &&是两个都为true时为true,一个为false时则是false

    ||使用或运算符,两个boolean变量参与||运算时,当两个变量

    有一个true时,结果即为true,只有两个变量均为false时结果为false


    使用“!”运算符

    “!"运算相对简单,只会有一个boolean变量参与运算

    运算的值与该变量相反,变量为true时结果为false,变量值为false结果为true


    关于"短路逻辑"的问题

    java逻辑运算遵循"短路逻辑"的原则:

    -对于"&&",当第一个操作数为false时,将不会判断第二个操作数,因此此时无论

    第二个操作数为何,最后的运算结果一定时false;

    -对于"||",当第一个操作数为true时,将不会判断第二个操作数,因为此时无论

    第二个操作数为何,最后的运算结果一定时true.



    变量使用过程中的常识问题:

    1>使用未经声明的变量

    2>使用不符合java标识命名规则的变量

    3>使用未经初始化的变量.

    4>变量的赋值与变量类型不匹配


    整数类型(int,long)使用常识问题:

    1>整数直接量超出了整数的范围.

    2>关于整数的除法:两个整数相除,会舍弃小数的部分,结果也是整数

    3>整数运算的溢出:两个整数进行运算时,其结果可能会超出整数范围而溢出

    4>表示long直接量,需要以L或者l结尾

    浮点类型在使用中,常见问题:

    1>浮点数直接量为double类型

    2>浮点数存在舍入误差问题(由于浮点数内部用二进制方式表示

    十进制,会存在舍入误差.二进制无法精确表示1/10,就好像十进制系统中

    无法精确表示1/3一样.对与要求精确运算的场合会导致代码缺陷,如果需要精确运算

    可以考虑放弃使用double或float而采用BigDecimal类来实现)


    4.对char类型变量的各种赋值方式:

    1>字符类型存储中文(字符类型事实上时一个16为无符号整数,这个值时对应字符的编码,

    java字符类型采用Unicode字符编码,Unicode时世界通用的定长字符集,所有字符都是16

    位字符直接量。对应中文,可以采用诸如:'中'的形式,也可以采用其对应的16进制的表示形式,

    两个字节表示一个字符(中英文都一样)

    例如:‘\u4e2d'.

    2>char类型的值可以作为整数类型之间使用

    char类型的值可以之间作为整数类型的值来使用,字符类型事实上是一个16位无符号整数

    即全部是正数,表示范围时0~65535

    char zhong='疯';

    int zhongvalue=zhong;

    System.out.println(zhongvalue); //30127

    上述输出范围为0~65535,如果把0~65535范围内的一个int整数赋给char类型整数

    系统会自动把这个int类型整数当成char类型来处理,如下:

    char c=97;

    System.out.println(c);

    上述代码输出结果为a.这说明系统自动把整数类型97当成char类型来处理,处理结果为a,

    即97为字母a的unicode码.


    5.类型转换常见问题:

    数据类型转换再使用过程中,常见问题如下:

    1>强制转换时的精度丧失和溢出.

    2>数字运算时的自动转换.

    3>byte,char,short转换为int的问题

    byte b1=28;

    byte b2=20;

    byte b3=b1+b2;    //编译错误  结果是int类型不能赋值给byte
































    展开全文
  • JAVA 除以0和无穷大

    千次阅读 2009-04-29 00:41:00
    JAVA中只有当int/int时会出现"除以0"的异常,其他类型则会产生无穷大-Infinity可以用类似语句来检测无穷大 if (Double.isInfinite(e)) System.out.println("检测到无穷大");
  • Java中Double类型的加减 - Java, 这篇文章只是简单的两个数的运算, 如果要是多个浮点数进行计算, 显然要多次调用方法才可以实现. 为了解决这个问题, 专门写了一个方法来取出繁杂的操作. /** * 適用多個數進行累加,...
  • 使用一段程序来说明,其中findMedianSortedArrays的功能为输入两个数组,将两个数组合并并找到位数代码片如下 package day20210303; import java.util.Arrays; public class findmidnum { public static ...
  • java中,当两个整数相除时,由于小数点以后的数字会被截断,运算结果将为整数,此时若希望得到运算结果为double,必须将两整数其一或是两者都强制转换为double。 例如: (double)a/b // 将整数其中一个强制转换为...
  • 问题是这样的,当我用一个int类型的值去整除100的时候,结果用double类型接收,直接变成0.0了???? int a=97; double b=a/100; System.out.println("result:"+b); 输出结果如下: 正确写法: //1 double b=a/100...
  • JAVA中int类除法运算保留2位

    千次阅读 2017-11-04 15:05:02
    //导DecimalFormat包  ...import java.text.DecimalFormat; public class Demo1 { public static void main(String[] args) throws Exception{ DecimalFormat df = new DecimalFormat("0.00"); 
  • https://blog.csdn.net/weixin_39800144/article/details/78278012 1.整数型运算时,结果会自动去除小数点后面的部分,如果需要适当的保留几位小数,需要转为fload类型,分子或者分母或者都转 如: 计算5除以6,保留...
  • 如何将字符串转换成Java中int类型?

    万次阅读 2018-05-20 10:14:00
    How can I convert a String to an int in Java? 如何将字符串转换成Java中int类型? My String contains only numbers
  • 区别在以下方面:一、定义方面:1、int为整数型,用于定义整数类型的数据 。2、float为单精度浮点型,能准确到小数点后六位 。3、double为双精度浮点型,能准确到小数点都十二位 。4、char为字符型,用于定义字符...
  • Java面试官:兄弟,你确定double精度比float低吗?

    万次阅读 多人点赞 2019-03-31 07:25:46
    我有一个朋友,叫老刘,戴着度数比我还高的近视镜,显得格外的“程序员”;...散席的时候,老刘特意叮嘱我把他和面试者的对话整理一下发出来,因为他觉得这段对话非常的精彩,值得推荐给更多初学Java的年轻人...
  • 1.在Java中所有输出数的类型默认是int类型,所以当分子除以分母就是1/2结果是0,除非你强制转化为double类型,结果才是0.5. 2.当float或者double类型进行运算如float减去float类型,double减去double类型,如果这...
  • Javajava.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。开发,如果我们需要精确计算的结果,则必须使用BigDecimal类来操作。 BigDecimal所创建的是对象,故我们不能使用传统的+、-...
  • java中整数的默认为int类型的一些问题

    千次阅读 多人点赞 2018-04-08 17:52:03
    thingking in java 读书感悟 作者 :淮左白衣 ...在java中,整数 默认是 int 类型,小数 默认是 double 类型 ;因此,在一些地方会造成一些错误; 比如下面的代码。在编译的时候,是报错的: ...
  • Java中Double型数据的加,减,乘,除

    千次阅读 2016-02-26 10:47:23
    public class DoubleArith { ... private static final int DEF_DIV_SCALE = 10;  /**  * 两个Double数相加  * @param v1  * @param v2  * @return Double  */  public static Doubl
  • Double类型的数据保留2位小数: Double a = 2.34566; BigDecimal bd = new BigDecimal(a); Double d = bd.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); d输出就是2.35, 注意会四舍五入 将String转...
  • int a=10; int b=3; DecimalFormat df = new DecimalFormat("0.00000"); String maerialRatio = df.format((float)a/b);...或者说两个int型的数据相除结果会默认为int型,如果其中有一个为double型结果就为doubl
  • java中,怎样把一个double数转换为字符串时,不用科学计数法表示? 解决方法1: //对Double类型的数字进行 格式化输出  package com.vincent.test;    import java.text.DecimalFormat;  ...
  • Java BigDecimal和double

    2017-09-14 15:29:34
    对于不需要任何准确计算精度的数字可以直接使用float或double,但是如果需要精确计算的结果,则必须使用BigDecimal类,而且使用BigDecimal类也可以进行大数的操作。BigDecimal类的常用方法如表11-15所示。 表11-15 ...
  • JAVA程序Float和Double精度丢失问题

    千次阅读 2014-03-27 14:25:45
    JAVA程序Float和Double精度丢失问题 为何浮点数可能丢失精度浮点十进制值通常没有完全相同的二进制表示形式。 这是 CPU所采用的浮点数据表示形式的副作用。为此,可能会经历一些精度丢失,并且一些浮点运算可能...
  • [JAVA] float,double计算方法

    千次阅读 2016-12-29 15:14:57
    1、float整数计算误差案例:会员积分字段采用float类型,导致计算会员积分时,7位整数的数据计算结果出现误差。原因:超出float精度范围,无法精确...浮点数在内存是按科学计数法来存储的,其整数部分始终是一个隐含
  • Java浮点数float和double精确计算的精度误差问题总结

    万次阅读 多人点赞 2015-05-21 14:34:19
    1、float整数计算误差 案例:会员积分字段采用...浮点数在内存是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。 float:2^23 = 8388608,一共七位,这意味
  • 在使用Javadouble 进行运算时,经常出现精度丢失的问题,总是在一个正确的结果左右偏0.0000**1。 特别在实际项目,通过一个公式校验该值是否大于0,如果大于0我们会做一件事情,小于0我们又处理其他事情。 这样...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,270
精华内容 6,908
关键字:

java中int除以double

java 订阅