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

Java Double获取点/逗号后的所有数字,java,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 BigDec

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

我得到

    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

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

请试试这个

 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);

    }    

如果我理解正确,对于给定的
双精度
数字,您需要在点后返回
n
数字。所以让我们看看:

public int decimalDigits(double x, int n) {
    double ans;
    ans = (x - (int) x) * Math.pow(10, n);
    return (int) ans;
}
完成了。希望这对你有帮助



对于您的特定示例,“n=2”应该可以。

没有必要一直使用
Number
tyeps。您可以利用
String
作为中介

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

为什么不直接使用:

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

sachin pasalkar做到了!小修但好

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

签出此代码始终返回“.”后面的数字。没有任何额外的参数,除了双变量

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

获取
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。

10
不是点后的
12.1
的所有数字。你的具体要求是什么?12点10分怎么样?那么12.123呢?@AlexTape:更新了我的代码:)别忘了接受答案他很好。。但是结果中仍然有一个0,xx。。我只需要99和10!;)即使是12也不知道。。这是任何数字的一个例子。。e、 g.1.84和599.63=>结果应该是84和63!这就是我所拥有的。。我在get 99中投1.99。。但即使我计算1.9,它给我9,我想要90@亚历克斯,12点123分怎么样?您希望它返回什么?请尝试
String.format(“%.2f”,d1)作为您的调解人。它会给你你要找的两个数字…x=12.9,n=2,返回0,但我需要90@对不起,我错了。。。我已经更正了我的答案。现在它应该可以工作了。这个方法不适用于很多参数——例如,anyMethod(0.29)返回28。999999999999996@SazzadurRahaman-这很公平,但依我看,这些都不是特例-这是试图以这种方式使用浮点运算的一个根本缺陷。更新的版本也不起作用-新的anyMethod(0.15)返回14。最后一个案例失败的问题可能是因为对浮点结果执行了mod操作,然后将其转换为int。我建议
((int)Math.round(a*100))%100