如何检查一个double值是否有小数部分

我有一个双重价值,我必须在我的用户界面显示。 现在条件是double = 0的十进制值例如。 – 14.0在这种情况下,我只能在我的用户界面上显示14。 此外,字符的最大限制是5。

例如 – 12.34,整数值不能大于2位数,因此是我们double的十进制值。

什么可能是这样做的最好方法?

你可以简单地做到这一点: d % 1 == 0看看是否有一些double d是整体。

 double d = 14.4; if((d-(int)d)!=0) System.out.println("decimal value is there"); else System.out.println("decimal value is not there"); 

所有的整数都是1的模。所以下面的检查必须给你答案。

 if(d % 1 == 0) 

ceil和floor都应该给出同样的结果

 Math.ceil(xy) == Math.floor(xy) 

或者干脆用double值检查是否相等

 xy == Math.ceil(xy) xy == Math.floor(xy) 

要么

 Math.round(xy) == xy 

比较两个值:正常的双倍值和双倍值。 如果它们是相同的值,则不存在小数部分。

根据需要使用数字格式化程序格式化该值。 请检查这个 。

您可能希望在比较之前舍入double到5位小数,因为如果您已经对它进行了一些计算,则double可以包含非常小的小数部分。

 double d = 10.0; d /= 3.0; // d should be something like 3.3333333333333333333333... d *= 3.0; // d is probably something like 9.9999999999999999999999... // d should be 10.0 again but it is not, so you have to use rounding before comparing d = myRound(d, 5); // d is something like 10.00000 if (fmod(d, 1.0) == 0) // No decimals else // Decimals 

如果您使用C ++,我不认为有一个循环函数,所以你必须自己实现它,如: http : //www.cplusplus.com/forum/general/4011/

有趣的小问题。 这有点棘手,因为实数并不总是表示确切的整数,即使它们是有意义的,所以允许宽容是很重要的。

例如容忍度可能是1E-6,在unit testing中,我保留了一个相当粗略的容忍,以便有更短的数字。

我现在可以阅读的答案都不是这样的,所以这是我的解决scheme:

 public boolean isInteger(double n, double tolerance) { double absN = Math.abs(n); return Math.abs(absN - Math.round(absN)) <= tolerance; } 

和unit testing,以确保它的工作:

 @Test public void checkIsInteger() { final double TOLERANCE = 1E-2; assertThat(solver.isInteger(1, TOLERANCE), is(true)); assertThat(solver.isInteger(0.999, TOLERANCE), is(true)); assertThat(solver.isInteger(0.9, TOLERANCE), is(false)); assertThat(solver.isInteger(1.001, TOLERANCE), is(true)); assertThat(solver.isInteger(1.1, TOLERANCE), is(false)); assertThat(solver.isInteger(-1, TOLERANCE), is(true)); assertThat(solver.isInteger(-0.999, TOLERANCE), is(true)); assertThat(solver.isInteger(-0.9, TOLERANCE), is(false)); assertThat(solver.isInteger(-1.001, TOLERANCE), is(true)); assertThat(solver.isInteger(-1.1, TOLERANCE), is(false)); }