1.情景展示

  double d = 1/10;

  System.out.println(d);

  返回的结果居然是0.0!这是怎么回事儿?

2.原因分析

  第一步:你会发现用运算结果也可以用int类型接收!

  没有报错,也就是说:

  在Java语言中,整数之间的除法运算,不管你的小数位有多少位,小数是几,统统舍弃,只返回整数位数字!

  第二步:用double类型接收为什么也可以?

  因为double类型的取值返回要大于int类型,所以属于向上类型转换,当然可以用比它大的容器接收啦(也就是可以直接进行转换 )。

  你用float类型或long类型接收也没有问题!

  第三步:为什么整数之间的除法运算,只返回整数位?

  因为在Java中,由运算结果,由被运算数的最高数据类型决定,也就是说:整数之间的运算,数据类型都为int类型,所以,返回的结果也为int类型。

3.解决方案

  掌握了这个原理,我们也就可以对症下药了!

  如果我们想要返回完整的运算结果 ,我们就需要将其中一个的数据类型转换成double类型或者float类型,而不是只改变接收运算结果的数据类型!

  方式一:将被除数转换成double类型

double d4 = 100d/235886;
System.out.println(d4);//4.2393359504167265E-4

  方式二:将除数转换成double类型

double d5 = 100/235886d;
System.out.println(d5);//4.2393359504167265E-4

  方式三:将被除数转换成float类型

float f4 = 2358861f/235886;
System.out.println(f4);//10.000004

  方式四:将除数转换成float类型

float f5 = 2358861/235886f;
System.out.println(f5);//10.000004

  连续运算

// 连续运算也是如此
int i4 = 1234567/1000/3600;
System.out.println(i4);//0
double d = 1234567d/1000/3600;
System.out.println(d);//0.34293527777777777

  转换成long类型没用哦!

long l = 100L/235886;
System.out.println(l);// 0

  两个Long类型的数值进行除法运算

System.out.println("long类型除法运算:" + 12345678910L/98765432110L);//0
System.out.println("上升为double类型运算:" + 12345678910L/98765432110D);//0.12499999894953125
System.out.println("上升为float类型运算:" + 12345678910L/98765432110F);//0.125

4.扩展  

  Java除法运算向上取整。

  方式一:向上类型转换+Math.ceil()

// 方式一:向上类型转换
double d = 100D/235886;
// 向上取整
int ceil2 = (int)Math.ceil(d);
System.out.println(ceil2);// 1

  方式二:整数位+(有余数整数+1)

// 只保留整数位
int floor = 100/235886;
// 余数
int remainder = 100%235886;
// 向上取整
int ceil = floor + (remainder > 0 ? 1 : 0);
System.out.println("只保留整数位:" + floor + "," + (remainder > 0 ? "余数大于0" : "余数为0") + ",向上取整:" + ceil);// 只保留整数位:0,余数大于0,向上取整:1

5.js的整数间的运算,会返回实际运算结果哦!

  console.log(1/10);//0.1

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

相关推荐:

 

Java 整数间的除法运算如何保留所有小数位?的更多相关文章

  1. java 除法运算只保留整数位的3种方式

      1.情景展示 根据提供的毫秒数进行除法运算,如果将毫秒数转换成小时,小时数不为0,则只取整数位,依此类推... 2.情况分析 可以使用3个函数实现 Math.floor(num)  只保留整数位 ...

  2. 使用java求高精度除法,要求保留N位小数

    题目要求是高精度除法,要求保留N位小数(四舍五入),并且当整数部分为0时去除0的显示 import java.math.BigDecimal; import java.util.Scanner; pu ...

  3. 除法运算时的一个常见异常之java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.

    一.背景 今天在计算库存消耗百分比(消耗的库存/总库存)的时候遇到了一个错误,java.lang.ArithmeticException: Non-terminating decimal expans ...

  4. BigDecimal除法运算出现java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result的解决办法

    BigDecimal除法运算出现java.lang.ArithmeticException: Non-terminating decimal expansion; no exact represent ...

  5. java精确除法运算(BigDecimal)

    除法运算的函数定义如下 BigDecimal.divide(BigDecimal divisor, int scale, RoundingMode roundingMode) ; scale为小数位数 ...

  6. sql 除法运算 保留两位小数

    sql 除法运算 保留两位小数 SELECT 1530/60 select cast(1530*1./60 as decimal(18,1))

  7. 初识Java(Java数字处理类-大数字运算)

    一.大数字运算 在 Java 中提供了大数字的操作类,即 java.math.BigInteger 类与  java.math.BigDecimal 类.这两个类用于高精度计算,体重 BigInteg ...

  8. Java BigDecimal 转换,除法陷阱(转)

    源地址:   http://blog.csdn.net/niannian_315/article/details/24354251 今天在用BigDecimal“出现费解”现象,以前虽然知道要避免用, ...

  9. 关于java中Double类型的运算精度问题

    标题     在Java中实现浮点数的精确计算    AYellow(原作) 修改    关键字     Java 浮点数 精确计算   问题的提出:如果我们编译运行下面这个程序会看到什么?publi ...

随机推荐

  1. selenium firefox 内存 速度优化

    selenium firefox 内存 速度优化 2 23 profile = webdriver.FirefoxProfile() 2 24 profile.set_preference(" ...

  2. JavaScript设计模式与开发实践随笔(一)

    编程语言按照数据类型大体可以分为两类,一类是静态类型语言,另一类是动态类型语言. 静态类型语言在编译时便已确定变量的类型,而动态类型语言的变量类型要到程序运行的时 候,待变量被赋予某个值之后,才会具有 ...

  3. 在safari上,解决fixed失效问题

    一个页面中有头部.底部和中间内容区域,底部固定在屏幕底端. 头部header 内容main 底部footer 方法一.在main上使用fixed定位,加上overflow-y属性. .main { p ...

  4. Android 创建工程

    安卓系统占有率 创建 Application name:程序的名称,一般会出现在应用程序的标题栏 Project name:一个项目的名称,实际对应一个文件夹 Pakcage name:此名理论上可以 ...

  5. VMware虚拟机文件夹中各文件作用详解

    虚拟机的文件管理由VMware Workstation来执行 一个虚拟机一般以一系列文件的形式储存在宿主机中,这些文件一般在由workstation为虚拟机所创建的那个目录中 这里列出了这些关键文件及 ...

  6. redis-5.0.5安装(linux centos)

    下载 cd /data wget http://download.redis.io/releases/redis-5.0.5.tar.gz 历史版本库地址 http://download.redis. ...

  7. 初探PHP设计模式

    设计模式不是一套具体的语言框架,是行之有效的编码规范,是一套被反复使用.多数人知晓的.经过分类的.代码设计经验的总结.使用设计模式的目的:为了代码可重用性.让代码更容易被他人理解.保证代码可靠性.合理 ...

  8. linux设备驱动程序-i2c(2)-adapter和设备树的解析

    linux设备驱动程序-i2c(2)-adapter和设备树的解析 (注: 基于beagle bone green开发板,linux4.14内核版本) 在本系列linux内核i2c框架的前两篇,分别讲 ...

  9. 如何预防SQL注入

    归纳一下,主要有以下几点: 1.永远不要信任用户的输入.对用户的输入进行校验,可以通过正则表达式,或限制长度:对单引号和 双"-"进行转换等. 2.永远不要使用动态拼装sql,可以 ...

  10. Httpd服务入门知识-Httpd服务常见配置案例之设定默认字符集

    Httpd服务入门知识-Httpd服务常见配置案例之设定默认字符集 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查看生产环境中使用的字符集案例 1>.查看腾讯设置的默认 ...