IT

[Java]小数ありの金額で、何枚の紙幣とコインが必要?

ドルやユーロでは、小数を含むため、
多くの日本語サイトの記事では小数点を含む計算ができません。


そして引っ掛かりやすいのが、
与えられた金額でそのまま、何セントあるか計算しがちですが、

その場合、
Double値で、小数の切り捨てなど
めんどくさいやり方に発展します。

筆者がつまずいたのもそこでした。


つまずくやり方

  amount = 68.70; 
//ここでは説明のために代入しておきます


  twentyBills = (int) amount/ 20;
  balance = (int) amount % 20;


         ---省略---


  int balance = (int) ((amount%1) * 100); 
//小数点以下だけを出して、整数にして計算したい


  quarters = balance / 25;   
//するとこのステップでなぜか割り算が正しくでない
// 70/25 で出力が "1" と出る






System.out.println(((Object)quarters).getClass().getSimpleName());

でデータタイプを見ても、ちゃんとInt型になってるのに、
割り算がおかしい。。



というふうに、訳が分からなくなったので、
そもそもかける100して、小数をなくしてしまおう!

正しい書き方

import java.util.Scanner;

public class MoneyExchange{

    public static void main(String[] args){

        Scanner input = new Scanner(System.in);
        System.out.print("金額を入力してください: ");
        double total = input.nextDouble();

        int twentyBills, tenBills, fiveBills,
                toonies, loonies, quarters, dimes,
                balance;    //残高

        /*
        twentyBills,       20ドル紙幣
        tenBills,          10ドル紙幣
        fiveBills,         5ドル紙幣
        toonies,           2ドル硬貨
        loonies,           1ドル硬貨
        quarters,          25セント硬貨
        dimes              10セント硬貨
        */

        balance = (int) (total * 100);

        twentyBills = balance / 2000;
        balance = balance % 2000;

        tenBills = balance / 1000;
        balance = balance % 1000;

        fiveBills = balance / 500;
        balance = balance % 500;

        toonies = balance / 200;
        balance = balance % 200;

        loonies = balance / 100;
        balance = balance % 100;

        quarters = balance / 25;
        balance = balance % 25;

        dimes = balance / 10;
        balance = balance % 10;

        balance = balance + 1;


        System.out.println("20ドル紙幣が "+ twentyBills + "枚");
        System.out.println("10ドル紙幣が "+ tenBills + "枚");
        System.out.println("5ドル紙幣が "+ fiveBills + "枚");
        System.out.println("2ドル硬貨が "+ toonies + "枚");
        System.out.println("1ドル硬貨が "+ loonies + "枚");
        System.out.println("25セント硬貨が "+ quarters + "枚");
        System.out.println("10セント硬貨が "+ dimes + "枚");
        System.out.println("1セント硬貨が "+ balance + "枚");
    }
}
0 0 投票数
評価
guest
0 コメント
Inline Feedbacks
すべてのコメントを見る