结论:不要将两个int类型的变量直接相除,会出现精度丢失问题,最好将其中一个变量强制转化成浮点型

现象: 两个int类型相除的结果要取整,如果相除得到0.53,那么结果会变成0,出现精度丢失的问题

DecimalFormat df = new DecimalFormat("0.00%");
int totalCompareAppCount=262;
int ctrRise=15;
String ctrRiseProportionPerReq=totalCompareAppCount>0?df.format(ctrRise/totalCompareAppCount):df.format(0);
System.out.println(ctrRiseProportionPerReq);

上面的代码结果是0.00%

为了不取整需要将其中一个数强制类型转化为float或者double,

DecimalFormat df = new DecimalFormat("0.00%");
int totalCompareAppCount=262;
int ctrRise=15;
String ctrRiseProportionPerReq=totalCompareAppCount>0?df.format((float)ctrRise/totalCompareAppCount):df.format(0);
System.out.println(ctrRiseProportionPerReq);

上面的代码结果为5.73%

知识点:
“/” 除以取整 ,“%”除以取余 ,
但是 “/” 被除数如果是浮点型数值 获取到的值可以是浮点型精确值
关注代码片段:
ctrRise 为 int 类型:

ctrRise/totalCompareAppCount

ctrRise 为 浮点型数值:

(float)ctrRise/totalCompareAppCount

Java除法运算精度问题的更多相关文章

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

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

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

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

  3. 关于java中Double类型的运算精度问题(转)

    Java Java double:浮点数:精确计算  public class Test{    public static void main(String args[]){        Syst ...

  4. Java 整数间的除法运算如何保留所有小数位?

      1.情景展示 double d = 1/10; System.out.println(d); 返回的结果居然是0.0!这是怎么回事儿? 2.原因分析 第一步:你会发现用运算结果也可以用int类型接 ...

  5. js,java,浮点数运算错误及应对方法

    js,java浮点数运算错误及应对方法 一,浮点数为什么会有运算错误 IEEE 754 标准规定了计算机程序设计环境中的二进制和十进制的浮点数自述的交换.算术格式以及方法. 现有存储介质都是2进制.2 ...

  6. 收藏的一段关于java大数运算的代码

    收藏的一段关于java大数运算的代码: package study_02.number; import java.math.BigDecimal; import java.math.BigIntege ...

  7. BigDecimal 高精度计算 熟悉扩展,java除法保留小数问题

    java保留两位小数问题: 方式一: 四舍五入  double   f   =   111231.5585;  BigDecimal   b   =   new   BigDecimal(f);  d ...

  8. BigDecimal - Java精确运算

    (1).浮点数精确计算 项目中一直存在一个问题,就是每次报表统计的物资金额和实际的金额要差那么几分钱,和实际金额不一致,让客户觉得总是不那么舒服,原因是因为我们使用java的浮点类型double来定义 ...

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

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

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

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

随机推荐

  1. JZOJ 6800.NOIP2020.9.19模拟spongebob

    题目大意 求形如 \[\sum_{i=1}^n |a_ix + b_i| \] 的最小值 思路 我们显然可以先把系数 \(a\) 提出来 于是就成了 \(\sum_{i=1}^n |a_i|·|x + ...

  2. Balanced Team

    https://vjudge.net/problem/CodeForces-1133C 题意:在数组中找出一段  每两个元素差值不大于5的这段元素个数的最大值. 1 #include <iost ...

  3. 《爆肝整理》保姆级系列教程-玩转Charles抓包神器教程(8)-Charles如何进行断点调试

    1.简介 Charles和Fiddler一样也有个强大的功能,可以修改发送到服务器的数据包,但是修改前需要拦截,即设置断点.设置断点后,开始拦截接下来所有网页,直到取消断点.这个功能可以在数据包发送之 ...

  4. Windows 注册表是什么

    注册表的概念 历史发展 在 Windows 3.x 操作系统中,注册表是一个极小文件,其文件名为 Reg.dat,里面只存放了某些文件类型的应用程序关联,大部分的设置是被放在 win.ini.syst ...

  5. 袋鼠云出品!数栈UI 5.0全新体验升级,设计背后的故事

    我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品.我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值. 前言 数栈作为云原⽣⼀站式⼤数据开发平台,从2016年发布第⼀个版本 ...

  6. LeetCode-1719 重构一棵树的方案数

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/number-of-ways-to-reconstruct-a-tree 题目描述 给你一个数组  ...

  7. window C盘满了/文件夹太长怎么移动

    通过以下命令移动文件夹 robocopy C:\Users\test\ E:\test\ /move /e C盘满了怎么办? 文件移动到其他盘,通过软连接访问 mklink /d "C:\U ...

  8. vivado工具ila抓取的波形读取方法

    保存ila文件 file-->export-->export ila_data.可以保存为ila格式或者vcd格式 (可以在modelism下转化为wlf文件后打开查看波形.) 打开保存后 ...

  9. 华为MA5626和S2700重置密码

    MA5626和S2700交换机,初始化密码遇到的问题. 主要目的把两台设备改成普通二层交换机. 一.MA5626交换机 1.进入设备,发现有密码. 帐号:root 密码:mduadmin 2.使用空配 ...

  10. kafak学习总结

    高可用 多副本机制: 主副本和从副本,从副本只负责同步主副本数据,只有主副本进行读写. 高并发 网络结构设计 多路复用 多selector -> 多线程-> 多队列 高性能 写 把数据先写 ...