1

私は、ユーザーが 2 または 2.00 を入力することを選択できるように、ユーザーが自分のスタイルで数字を自由に入力できるようにしようとしていますが、ご存知のように、double はこれを受け入れることができません (2)。double が小数点以下 2 桁のみでこれを受け入れるようにしたい (基本的にはお金を表している)。これは、入力を取得して2decimals形式に変換する方法がわからないものです。java.tks の新機能

Google を試してみましたが、入力自体でフォーマットできる場所が見つかりません。つまり、複数の異なる変数に入力した後に後処理するのではなく、ユーザーに小数点以下 2 桁以外を入力させてはいけません。, tks

public static void add()
{
 double accbal;
   Scanner sc = new Scanner(System.in);
    DecimalFormat df = new DecimalFormat("0.00");

        System.out.println("Enter account balance");
        accbal =  sc.nextDouble();
 //this is the part where i need to know the entered value is formated to only 2 decimal places

}
4

3 に答える 3

1

これを試して:

    DecimalFormat  df = new DecimalFormat ("#.##");//format to 2 places
    accbal =  sc.nextDouble();
    System.out.print(df.format(aacbal));//prints double formatted to 2 places

しかし、私はあなたが言うのを見ます:

グーグルを試しましたが、入力自体でフォーマットできる場所が見つかりません。つまり、ユーザーに小数点以下2桁以外の小数点以下の桁を入力させないことを意味します。

上記が何らかの理由で意図している場合は、を使用して入力を読み取りnextLine()、小数点以下の長さが2だけであることを確認してください。

double accbal=0;
Scanner sc = new Scanner(System.in);

while (true) {
    System.out.println("Enter account balance");
    String s = sc.nextLine();

    if (s.substring(s.indexOf('.') + 1).length() <= 2)//accept input and convert to double
    {
        accbal = Double.parseDouble(s);
        break; //terminates while loop
    } else {
        System.out.println("Incorrect input given! Decimal places cant exceed 2");
    }
}
System.out.println("Balance: "+accbal);
于 2012-08-19T16:05:09.673 に答える
1

小数点以下の桁数を表示することは実際にはエンド ユーザーにとって形式的なものであるため、代わりに で値を読み取り、それをまたはStringに変換することができます。実際の財務を扱っている場合は、後者が推奨されます。DoubleBigDecimal

関連: すべてのコンピューター科学者が浮動小数点演算について知っておくべきこと

public static void add() {
    BigDecimal accbal; // could declare a Decimal
    Scanner sc = new Scanner(System.in);
    DecimalFormat df = new DecimalFormat("#.00");

    System.out.println("Enter account balance");
    accbal = new BigDecimal(sc.nextLine());
    System.out.println(df.format(accbal.doubleValue()));

}
于 2012-08-19T16:12:24.597 に答える
0

「#.##」形式の入力を受け入れたい場合は、カスタム正規表現を指定するだけですScanner.hasNext:-)

final Scanner input = new Scanner(System.in);
final Pattern pattern = Pattern.compile("\\d+\\.\\d{2}?");
while (input.hasNext()) {
  System.out.println((input.hasNext(pattern) ? "good" : "bad")
    + ": " + input.nextDouble());
}

次の入力を使用します。

2.00
3.14159
2

結果は次のとおりです(ここにもあります

good: 2.0
bad: 3.14159
bad: 2.0

この方法で、小数第 2 位までの金額を入力したことを確認できます。


単なる後処理ソリューションは必要ないと言いましたが、既に金額があり、小数点以下 2 桁を使用するように変換したい場合、および精度に重点を置いている場合 (これはお金であるため)、使用してみてください。BigDecimal-- 特に、次を参照してくださいBigDecimal.setScale

while (input.hasNextBigDecimal()) {
  System.out.println(input.nextBigDecimal().setScale(2, RoundingMode.HALF_UP));
}

したがって、出力は次のようになります。

2.00
3.14
2.00
于 2012-08-19T16:15:49.470 に答える