86

我有一个必须在我的 UI 上显示的双重值。现在的条件是 double = 0 的十进制值,例如。- 14.0 在这种情况下,我只需要在我的 UI 上显示 14。此外,此处的字符数上限为 5。

例如 - 12.34 整数值不能大于 2 位,我们的双精度值也是如此。

这样做的最佳方法是什么?

4

8 回答 8

264

你可以简单地做

d % 1 == 0

检查是否double d是一个整体。

于 2013-04-12T05:46:57.240 回答
24
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");
于 2013-04-12T05:45:37.220 回答
12

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

if(d % 1 == 0)
于 2013-04-12T05:58:12.340 回答
10

either ceil and floor should give the same out out put

Math.ceil(x.y) == Math.floor(x.y)

or simply check for equality with double value

x.y == Math.ceil(x.y)
x.y == Math.floor(x.y)

or

Math.round(x.y) == x.y
于 2013-04-12T05:46:32.300 回答
2

Compare two values: the normal double, and the double after flooring it. If they are the same value, there is no decimal component.

于 2013-04-12T05:45:18.750 回答
1

在比较之前,您可能希望将双精度数舍入到小数点后 5 位左右,因为如果您使用它进行了一些计算,双精度数可能包含非常小的小数部分。

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/

于 2013-04-12T06:32:34.273 回答
1

有趣的小问题。这有点棘手,因为实数并不总是代表精确的整数,即使它们是故意的,所以允许公差很重要。

例如容差可能是 1E-6,在单元测试中,我保持了一个相当粗的容差来获得更短的数字。

我现在可以阅读的答案都没有以这种方式工作,所以这是我的解决方案:

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

和单元测试,以确保它有效:

@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));
}
于 2014-05-31T23:52:18.283 回答
0

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

于 2013-04-12T05:46:36.103 回答