如果它不是整数,则仅返回小数。 JAVA

时间:2014-01-03 21:59:34

标签: java if-statement double calculator

我一直试图编写一个给出一个double的函数isWhole并查看它是否是一个整数,如果它返回没有小数的值(作为一个int? )否则返回3位小数(我可以用数字格式做这部分。

我的问题是如何检查double是否是整数,甚至是递归小数?

5 个答案:

答案 0 :(得分:5)

[更新] 返回值 - 小数点后3位

public boolean isWhole(double value) {
    return Math.floor(value) == value;
}
  • 您不能拥有返回intdouble
  • 的函数
  • double转换为int;只需类型转换: - int valueInt = (int) valueDouble;

答案 1 :(得分:2)

if(Math.abs(in-Math.floor(in)) < 0.001){
    /* is whole number */
} else {
    /* is not whole number */
}

实际上没有为双精度定义整数,因此可以将整数视为不会导致n.000的数字。具体选择0.001是因为它是预期的输出精度。

答案 2 :(得分:2)

我的第一个建议是:保持简单。 Java具有使这类事情变得简单的功能:

import java.Math;
public class MyFunctionsLibrary {
    public static boolean isWhole(double x) {
        if(x - Math.floor(x) == 0)
            return true;
        else
            return false;
    }
    public static void testIt() {
        double a = 123.456;
        Integer whole = null;
        Double nonWhole = null;
        if(isWhole(a))
            whole = new Integer(Math.floor(a));
        else
            nonWhole = new Double(a);
    }
}

答案 3 :(得分:1)

这是我原来的答案:

怎么样

Math.floor(x)==x

如果它是一个数学整数(比如文档),那么地板会保持x不变,所以当没有任何东西可以舍入时,相等应该保持不变。

经过一番思考,我认为使用精确比较可能会导致不必要的结果。问题是,OP的要求到底是什么。是吗

  1. 如果是数学整数,则显示没有数字的数字 小数点后,如果不是,则显示3位数后 小数点。或者是

  2. 如果使用三位数格式化会在小数点后生成000,则只显示一个整数。

  3. 如果(1)是要求,上面和其他答案中显示的解决方案才有效,因为数字2.000001将变为2.000,因为它不是数学整数。

    如果Locale固定为默认值,则为endsWith() - pattern格式化1.0当然可以优化为固定字符串,如“.000”或“,000”。

    如果实际要求(2),我的预感是没有办法首先将数字格式化为字符串,然后才剥离零,如下所示:

    String format(Locale l, double d) {
      String zeros = String.format(l, "%.3f", 1.0d);
      String s = String.format(l, "%.3f", d); 
      if (s.endsWith(zeros.substring(1))) {
        return s.substring(0, s.length()-4);
      }
      return s;
    }
    

答案 4 :(得分:-1)

要查看double是否为整数,请使用

    double d;        
    int whole = (int) d;
    if(whole == d){
        return whole;
    }
    else{
        (your formatting here)
        return formattedDouble;
    }

您可以通过创建:

来检查它是否是递归的
  String s = d + "";
  for(int i = 1; i < s.length(); i++){
      if(s.charAt(i) == s.charAt(i-1)){
          continue;
      }
      else{
         return false;
      }
  }