web-dev-qa-db-ja.com

10進数の値を取得するにはどうすればよいですか?

Javaで単一値の剰余と商を取得する方法を知りたい。

例:

3/2 1.5の値を取得する必要があります。

/演算子を使用すると、商のみが取得されます。 %演算子を使用すると、残りのみが取得されます。同じ変数で一度に両方を取得するにはどうすればよいですか?

23
Raja
quotient = 3 / 2;
remainder = 3 % 2;

// now you have them both
57
recursive

あなたの例では、Javaはinteger算術演算を実行し、除算の結果を四捨五入しています).

質問に基づいて、浮動小数点演算を実行します。そのためには、少なくとも1つの用語を浮動小数点として指定(または変換)する必要があります。

浮動小数点の指定:

3.0/2
3.0/2.0
3/2.0

浮動小数点への変換:

int a = 2;
int b = 3;
float q = ((float)a)/b;

または

double q = ((double)a)/b;

floatおよびdoubleの説明については、 Javaトラップ:double および Java浮動小数点数の複雑さ を参照してください)

16
vladr

これを確認してください: http://download.Oracle.com/javase/1,5.0/docs/api/Java/math/BigDecimal.html#divideAndRemainder%28Java.math.BigDecimal%29

intまたはlong変数をBigDecimalオブジェクトにラップするだけです、次にdivideAndRemainderメソッドを呼び出します。返される配列には、商と剰余が(この順序で)含まれます。

8

心配しないでください。あなたのコードでは、非効率的と思われるかもしれませんが、あなたが言及したように/と%の操作を別々に行ってください。 JITコンパイラーに心配させてくださいこれらの操作を組み合わせて、単一の機械語命令で商と剰余の両方を取得することについて(覚えている限りでは、一般的にそうです)。

7
Neil Coffey

好きなことができます、

int a = 3;
int b = 2;
int quotient = a / b;
int remainder = a % b;

実数で商を取得するには

System.out.println((double) a / b);

整数の商を取得するには

System.out.println("Quotient: " + quotient);
System.out.println("Remainder: " + remainder);

実数の商を取得して、小数点以下1桁の数値を取得する

System.out.println(a / b + "." + a % b * 10 / b);

注:最後の方法では、小数点以下を切り上げません。

1

両方のパラメーターをfloatとして初期化すると、実際の除算値が得られます。例えば:

float RoomWidth, TileWidth, NumTiles;
RoomWidth = 142;
TileWidth = 8;
NumTiles = RoomWidth/TileWidth;

回答:17.75。

1
user3559041
int a = 3;
int b = 2;
float c = ((float)a)/b
1
Matthew

入力をdoubleに変換して除算してください。

0

とても簡単だということです。 doubleとして設定します。だから言うことができます

double answer = 3.0/2.0;
System.out.print(answer);
0
Adan Vivero

@recursiveのsolusion(受け入れられた答え)は100%正しいです。参考のためにサンプルコードを追加しています。

私の場合は、2桁の10進数で価格を表示することです。これは、バックエンド応答の一部です:"price": 2300, "currencySymbol": "CD", ...

これは私のヘルパークラスです。

public class CurrencyUtils
{
    private static final String[] suffix = { "", "K", "M" };

    public static String getCompactStringForDisplay(final int amount)
    {
        int suffixIndex;
        if (amount >= 1_000_000) {
            suffixIndex = 2;
        } else if (amount >= 1_000) {
            suffixIndex = 1;
        } else {
            suffixIndex = 0;
        }

        int quotient;
        int remainder;
        if (amount >= 1_000_000) {
            quotient = amount / 1_000_000;
            remainder = amount % 1_000_000;
        } else if (amount >= 1_000) {
            quotient = amount / 1_000;
            remainder = amount % 1_000;
        } else {
            return String.valueOf(amount);
        }

        if (remainder == 0) {
            return String.valueOf(quotient) + suffix[suffixIndex];
        }

        // Keep two most significant digits
        if (remainder >= 10_000) {
            remainder /= 10_000;
        } else if (remainder >= 1_000) {
            remainder /= 1_000;
        } else if (remainder >= 100) {
            remainder /= 10;
        }

        return String.valueOf(quotient) + '.' + String.valueOf(remainder) + suffix[suffixIndex];
    }
}

これは私のテストクラスです(Junit 4に基づく):

public class CurrencyUtilsTest {

    @Test
    public void getCompactStringForDisplay() throws Exception {
        int[] numbers = {0, 5, 999, 1_000, 5_821, 10_500, 101_800, 2_000_000, 7_800_000, 92_150_000, 123_200_000, 9_999_999};
        String[] expected = {"0", "5", "999", "1K", "5.82K", "10.50K", "101.80K", "2M", "7.80M", "92.15M", "123.20M", "9.99M"};

        for (int i = 0; i < numbers.length; i++) {
            int n = numbers[i];
            String formatted = CurrencyUtils.getCompactStringForDisplay(n);
            System.out.println(n + " => " + formatted);

            assertEquals(expected[i], formatted);
        }
    }

}
0
Hesam