3

それは簡単な作業ですが、私はそれを自分で解決することはできません。

私は得た

    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

} 

とにかく私はreturntypeとして整数を好みます..誰かが簡単な解決策/ヒントを得ましたか?

親切に

4

7 に答える 7

11

単に使用しないのはなぜですか:

int anyMethod(double a){
  //if the number has two digits after the decimal point.
  return (int)((a + 0.001) * 100) % 100;
}
于 2013-03-16T16:27:09.760 に答える
8

aの小数部分を取得する簡単な方法はdouble、モジュロ演算子を使用すること%です。ただし、浮動小数点演算は正確ではないという事実を考慮する必要があります。例えば、

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

小数点以下2桁をとして取得したい場合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

以前のように、これから小数点以下2桁が必要な場合は、次のように実行できます。

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

これらの最後の2つの方法と最初の2つの方法には、いくつかの違いがあることに注意してください。これらは引数の符号を保持するため、-12.99の最後の例を使用すると、-99が返され、小数部分が処理されます。整数の1であるため、12の最後の例を使用すると、100が返されます。

于 2013-03-16T16:54:42.133 に答える
3

Number常に typepsを使用する必要はありません。String仲介役としてご利用いただけます。

String mediator = Double.valueOf(d1).toString();
mediator = mediator.substring(mediator.indexOf('.') + 1);
Integer result = Integer.valueOf(mediator);
于 2013-03-16T16:25:30.310 に答える
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);

    }    
于 2013-03-16T16:21:21.877 に答える
0

このコードが「。」の後に数字を返すことを確認してください。いつも。double変数以外の追加パラメーターなし。

public int anyMethod(double d)
{
    String numString = d+"";
    return Integer.parseInt(numString.substring(numString.indexOf('.')+1));
}
于 2013-03-16T16:50:11.693 に答える
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」で十分です。

于 2013-03-16T16:25:23.590 に答える
0

sachin-pasalkar やりました!少し修正しますが大丈夫です!

public static int anyMethod(double a){
      return (int) (a*100)%100;
    }
于 2013-03-16T16:37:24.487 に答える