Java 整数间的除法运算如何保留所有小数位?
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 整数间的除法运算如何保留所有小数位?的更多相关文章
- java 除法运算只保留整数位的3种方式
1.情景展示 根据提供的毫秒数进行除法运算,如果将毫秒数转换成小时,小时数不为0,则只取整数位,依此类推... 2.情况分析 可以使用3个函数实现 Math.floor(num) 只保留整数位 ...
- 使用java求高精度除法,要求保留N位小数
题目要求是高精度除法,要求保留N位小数(四舍五入),并且当整数部分为0时去除0的显示 import java.math.BigDecimal; import java.util.Scanner; pu ...
- 除法运算时的一个常见异常之java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
一.背景 今天在计算库存消耗百分比(消耗的库存/总库存)的时候遇到了一个错误,java.lang.ArithmeticException: Non-terminating decimal expans ...
- BigDecimal除法运算出现java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result的解决办法
BigDecimal除法运算出现java.lang.ArithmeticException: Non-terminating decimal expansion; no exact represent ...
- java精确除法运算(BigDecimal)
除法运算的函数定义如下 BigDecimal.divide(BigDecimal divisor, int scale, RoundingMode roundingMode) ; scale为小数位数 ...
- sql 除法运算 保留两位小数
sql 除法运算 保留两位小数 SELECT 1530/60 select cast(1530*1./60 as decimal(18,1))
- 初识Java(Java数字处理类-大数字运算)
一.大数字运算 在 Java 中提供了大数字的操作类,即 java.math.BigInteger 类与 java.math.BigDecimal 类.这两个类用于高精度计算,体重 BigInteg ...
- Java BigDecimal 转换,除法陷阱(转)
源地址: http://blog.csdn.net/niannian_315/article/details/24354251 今天在用BigDecimal“出现费解”现象,以前虽然知道要避免用, ...
- 关于java中Double类型的运算精度问题
标题 在Java中实现浮点数的精确计算 AYellow(原作) 修改 关键字 Java 浮点数 精确计算 问题的提出:如果我们编译运行下面这个程序会看到什么?publi ...
随机推荐
- ssh tunneling应用案例-AWS EC2 vnc图形化桌面的支持
一般地,无论是AWS EC2还是阿里云的云主机,linux系统默认都只提供ssh登录方式.如果你是一个技术控,非常希望把图形化界面给折腾出来,这其中就不需有vnc server的支持,除此之外,还涉及 ...
- 在python当中使用redis
redis数据库 # 1.安装redis与可视化操作工具 # 2.在服务中管理redis服务器的开启关闭 # 3.命令行简单使用redis: -- redis-cli # 启动客户端 -- set k ...
- vue使用vue-cli创建项目
安装运行环境(node和npm) 安装vue-cli(查看是否安装成功vue -V) 安装webpack 新建项目 1.vue init webpack 项目名称 2.配置项目有关的信息(项目名称,开 ...
- CSS3实现0.5px边框
用CSS设置边框宽度为0.5px,可以使边框看起来更加细腻,特别是在移动端,设计师会有这样的要求. 但遗憾的是,大多数Android手机并不能识别0.5px.因此我们可以使用CSS3来变通的实现0.5 ...
- iOS静态库转Framework动态库
参考文章: iOS静态库(.a 和framework) XCode6制作动态及静态Framework 说说iOS中静态库的开发 dyld: Library not loaded: @rpath/ ...
- idea git提交代码步骤(转载)
参考一: https://blog.csdn.net/u013452337/article/details/79956604
- mybatis批量新增报错 BadSqlGrammarException
org.springframework.jdbc.BadSqlGrammarException: ### Error updating database. Cause: com.mysql.jdbc. ...
- prometheus学习系列一: Prometheus简介
Prometheus简介 prometheus受启发于Google的Brogmon监控系统(相似kubernetes是从Brog系统演变而来), 从2012年开始由google工程师Soundclou ...
- SpringBoot + Nginx 配置HTTPS的一次经历
最近公司开发了一款小程序的应用,但是小程序为了保证数据安全,强制要求使用HTTPS,然后就不得不去配置了一下. 之前在php开发的项目上配置过一次,使用的是wdcp的控制台程序,配置起来很简单,不需要 ...
- PAT甲级1015题解——令人迷茫的翻译
题目分析: 本题计算过程简单,但翻译令我迷茫:题意读清楚很重要(反正我是懵逼了)对于一个10进制的数,如果它是一个素数,把它转换成d进制,再将这个序列逆序排,这个逆序的d进制数的10进制表示如果也是素 ...