題目描述

給定一個名為payment的雙倍精準浮點數,表示一個金錢的數量。接著將payment轉換為美國、印度、中國、法國所使用的貨幣格式。



原題網址

輸入格式

輸入一個雙倍精準浮點數,範圍在0到109之間(包含0和109)。

輸出格式

輸出共有四行,格式如下。

US: formattedPayment
India: formattedPayment
China: formattedPayment
France: formattedPayment

formattedPayment為payment格式化成符合當地貨幣格式的結果。

範例輸入

12324.134

範例輸出

US: $12,324.13
India: Rs.12,324.13
China: ¥12,324.13
France: 12 324,13 €

解題概念

使用NumberFormat類別的getCurrencyInstance方法可以將payment轉換為美國、印度、中國、法國所使用的貨幣格式。Locale類別內建了許多常用國家和語言的Locale物件,其中包括美國、中國、法國的Locale物件,沒有印度的Locale物件。因此我們必須自己建立出印度的Locale物件。Locale類別的物件建構子可以透過參數傳入語言和國家的字串,語言字串需符合ISO 639格式,國家字串需符合ISO 3166格式。以這題目的輸出格式來說,印度的Locale物件語言應使用English,English在ISO 639中的代碼為「en」。而印度在ISO 3166中的代碼為「IN」。

參考答案

import java.text.NumberFormat;
import java.util.Locale;
import java.util.Scanner;

public class Solution {

    public static void main(final String[] args) {

        final Scanner scanner = new Scanner(System.in);
        final double payment = scanner.nextDouble();
        scanner.close();

        final Locale indiaLocale = new Locale("en", "IN");

        final String us = NumberFormat.getCurrencyInstance(Locale.US).format(payment);
        final String india = NumberFormat.getCurrencyInstance(indiaLocale).format(payment);
        final String china = NumberFormat.getCurrencyInstance(Locale.CHINA).format(payment);
        final String france = NumberFormat.getCurrencyInstance(Locale.FRANCE).format(payment);

        System.out.println("US: " + us);
        System.out.println("India: " + india);
        System.out.println("China: " + china);
        System.out.println("France: " + france);
    }
}