Java Double在点/逗号后获取所有数字

时间:2013-03-16 16:11:37

标签: java

这是一项简单的任务,但我无法自己解决..

我得到了

    double digit1 = 12.1;
    double digit2 = 12.99;

并需要一种方法给我这个:

    anyMethod(digit1); //returns 10
    anyMethod(digit2); //returns 99

我拥有的是

public static void getAfterComma(double digit) {

    BigDecimal bd = new BigDecimal(( digit - Math.floor( digit )) * 100 );
    bd = bd.setScale(4,RoundingMode.HALF_DOWN);
    System.out.println(bd.toBigInteger()); // prints digit1=1 and digit2=99

} 

无论如何我更喜欢整数作为返回类型.. 有人得到快速解决方案/提示吗?

麻烦

7 个答案:

答案 0 :(得分:11)

为什么不简单地使用:

int anyMethod(double a){
  //if the number has two digits after the decimal point.
  return (int)((a + 0.001) * 100) % 100;
}

答案 1 :(得分:7)

获取double的小数部分的一种简单方法是使用模运算符%。但是,您必须考虑浮点运算不精确的事实。例如,

System.out.println(12.1 % 1);   // outputs 0.09999999999999964
System.out.println(12.99 % 1);  // outputs 0.9900000000000002

如果你想得到两个十进制数字作为int,这是我认为你要问的,你可以实现这一点,掩盖浮点问题,如下:

System.out.println(Math.round((12.1 % 1) * 100));   // outputs 10
System.out.println(Math.round((12.99 % 1) * 100));  // outputs 99

但是,您应该考虑沿着您开始使用的BigDecimal路径进一步向下,该路径使用任意精度算法。你可以这样做:

System.out.println(new BigDecimal("12.1").remainder(BigDecimal.ONE));   // outputs 0.1
System.out.println(new BigDecimal("12.99").remainder(BigDecimal.ONE));   // outputs 0.99

如果像以前一样,你想要两个十进制数字,你可以这样做:

System.out.println(new BigDecimal("12.1").remainder(BigDecimal.ONE).multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP).intValue());   // outputs 0.1
System.out.println(new BigDecimal("12.99").remainder(BigDecimal.ONE).multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP).intValue());   // outputs 0.99

请注意,最后两个方法与前两个方法之间存在一些差异:它们保留了参数的符号,因此如果您使用-12.99的最终示例,则会得到-99,并且它们会对待整数的小数部分为1,所以如果你使用12的最后一个例子,你将得到100个。

答案 2 :(得分:3)

没有必要一直使用Number tyeps。您可以利用String作为调解员。

String mediator = Double.valueOf(d1).toString();
mediator = mediator.substring(mediator.indexOf('.') + 1);
Integer result = Integer.valueOf(mediator);

答案 3 :(得分:1)

试试这个

 public static void main(String args[]){
        double a=12.99;
        double b=12.1;


        System.out.println(method(a));
        System.out.println(method(b));
    }

    private static int method(double a) {
        return (int) ((a*100)%100);

    }    

答案 4 :(得分:0)

如果我理解正确,您需要在给定n个数字的点后面返回double个数字。所以......让我们看看:

public int decimalDigits(double x, int n) {
    double ans;
    ans = (x - (int) x) * Math.pow(10, n);
    return (int) ans;
}

完成。希望这会对你有所帮助。


对于您的具体示例,'n = 2'应该这样做。

答案 5 :(得分:0)

sachin-pasalkar完成了它!很少修复但很好!

public static int anyMethod(double a){
      return (int) (a*100)%100;
    }

答案 6 :(得分:0)

看看这段代码在“。”之后返回数字。总是。除了双变量之外没有任何额外的参数。

public int anyMethod(double d)
{
    String numString = d+"";
    return Integer.parseInt(numString.substring(numString.indexOf('.')+1));
}