JAVA 中除法后小数精度问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA 中除法后小数精度问题相关的知识,希望对你有一定的参考价值。

除法后总是归整数的问题...很是郁闷. 比如3/5 int 结果为 0, double 结果为0.0.... 为什么??? 有什么办法能让除法后的小数保留下来?

你说的这个问题涉及到数字精度问题,在程序中,数字运算总是低精度的向高精度的自动转化。比如(int)/(float)就会得到你想要的小数数位,这是由数字在计算机中的运算方式决定的。如果你用3/5.0或者3.0/5,你就可以得到你想要的小数。
在计算机中,整型(int)和浮点(float,double)的表示形式各不相同,占用内存空间也不同,在运算时,为了得到正确的结果,就要进行对位,如果数据类型不一致,就要进行转化。在硬件层面上就是把占用内存少的整型向浮点转换,也就是为这个整型添加额外的字节参与运算,尽管这些字节中都是0,这是数字精度的问题。
现在是两个整形数,运算时,计算机认为不需要进行数据类型的转化,所以就得到你见到的结果。
参考技术A 因为int 是整数,整数除整数就是整数
double是小数。小数除小数才是小数
有两种方法,
1.是直接用小数除
如3.0/5.0
这样编译器会认为他们是double类型
2.是转换成double,或直接定义成double
如double a=3;
double b=5;
System.out.println(3/5);
还有什么不懂可以HI我本回答被提问者采纳
参考技术B int 类型是按整除结果算,如果你两个数不能整除,那结果就会不对。
double、BigDecimal等如果你不设置精度的话,那它默认就会以你的两个数中精度大的那个来设置一个精度,而你这里两个都是整数,所以它把计算结果也按照整数进行操作。
参考技术C 恩 用double去运算 不然你本来的句子是 double d = 3/5; 3/5都是整数 计算起来是0 而你付值给double 就变成了0.0 参考技术D 用最简单的方法就是3.0/5这样就会得到你想要的结果了

解决“浮点上下文中的整数除法”警告

【中文标题】解决“浮点上下文中的整数除法”警告【英文标题】:Solve "integer division in floating-point context" warning 【发布时间】:2020-11-28 18:35:05 【问题描述】:

如何,在这行代码中:

int fps = 60;
double timePerTick = 1000000000 / fps;

【问题讨论】:

【参考方案1】:

在将两个ints 相除时,您将使用整数除法,然后才将结果提升为双精度数,从而丢失小数点后的所有精度。您可以改用 double 文字来使用浮点精度:

double timePerTick = 1000000000.0 / fps;
// Here -----------------------^

【讨论】:

以上是关于JAVA 中除法后小数精度问题的主要内容,如果未能解决你的问题,请参考以下文章

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

java里怎么算除法?

excel中除法公式除不尽选择保留两位小数的时候,实际上小数点后有很多位,选择性粘贴也有很多位

android中如何实现除法的保留小数点后2位,四舍五入!

数据库select语句中进行除法如何保留小数点后数据

小数第n位:高精度