題目描述
給定一個名為payment的雙倍精準浮點數,表示一個金錢的數量。接著將payment轉換為美國、印度、中國、法國所使用的貨幣格式。
原題網址
輸入格式
輸入一個雙倍精準浮點數,範圍在0到109之間(包含0和109)。
輸出格式
輸出共有四行,格式如下。
US: formattedPayment
India: formattedPayment
China: formattedPayment
France: 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 €
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);
}
}