我目前正在处理一项任务,该任务涉及获取一个表示一笔钱的双精度数字,并使用NumberFormat类的getCurrencyInstance方法将其转换为美国、印度、中国和法国的货币格式.

输入:

A single double-precision number denoting 'payment'

输出:

On the first line, print US: 'u' where 'u' is 'payment' formatted for US currency.
On the second line, print India: 'i' where 'i' is 'payment' formatted for the Indian currency.
On the third line, print China: 'c' where 'c' is 'payment' formatted for Chinese currency.
On the fourth line, print France: 'f' where 'f' is formatted for French currency.

输入示例:

12324.134

示例输出:

US: $12,324.13

India: Rs.12,324.13

China: ¥12,324.13

France: 12 324,13 €

我的代码是:

import java.util.*;
import java.text.*;
import java.util.Currency;

public class Solution {
    
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        double payment = scanner.nextDouble();
        scanner.close();
        
        Locale indiaLocale = new Locale("en", "IN");
        
        Locale locale = Locale.US;
        Currency us = Currency.getInstance(locale);
        String symbol = us.getSymbol(locale);
        System.out.println("US: " + symbol + payment);
        
        Locale locale2 = indiaLocale;
        Currency in = Currency.getInstance(locale2);
        String symbol2 = in.getSymbol(locale2);
        System.out.println("India: " + symbol2 + payment);
        
        Locale locale3 = Locale.CHINA;
        Currency ch = Currency.getInstance(locale3);
        String symbol3 = ch.getSymbol(locale3);
        System.out.println("China: " + symbol3 + payment);
        
        Locale locale4 = Locale.FRANCE;
        Currency fr = Currency.getInstance(locale4);
        String symbol4 = fr.getSymbol(locale4);
        System.out.println("France: " + payment + " " + symbol4);
    }
}

我的意见是:

12324.134

我的输出:

US: $12324.134

India: Rs.12324.134

China: ¥12324.134

France: 12324.134 €

我的问题出在输入的格式‘12324.134’上.正如您所看到的,我已经设法输出了正确的货币符号,特别是印度,因为印度没有内置的语言环境,所以我必须构建一个语言为en(即英语)的语言.

我似乎就是不能把逗号放在正确的位置,而且出于某种原因,法国的预期输出在前两位数字之后有一个空格.这可能是因为我没有使用Currency类的正确方法,但这就是我的问题所在.如有任何建议,我们不胜感激.

推荐答案

NumberFormat.getCurrencyInstance

您可能应该使用NumberFormat.getCurrencyInstanceNumberFormat.format.试试这个:

public static void main(String[] args) {
    double payment = 12324.134; // I'd use BigDecimal instead of double here, BTW. See the comment from another user under your post.

    Locale us = Locale.US;
    System.out.println("US: " + NumberFormat.getCurrencyInstance(us).format(payment));

    Locale india = new Locale("en", "IN");
    System.out.println("India: " + NumberFormat.getCurrencyInstance(india).format(payment));

    Locale china = Locale.CHINA;
    System.out.println("China: " + NumberFormat.getCurrencyInstance(china).format(payment));

    Locale france = Locale.FRANCE;
    System.out.println("France: " + NumberFormat.getCurrencyInstance(france).format(payment));
}

输出为:

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

在你的任务中甚至说过:

使用NumberFormat类的getCurrencyInstance方法

Java相关问答推荐

表格栏上的事件过滤器在PFA中不起作用

Oracle DUAL表上使用DDL时jOOQ问题的解析'

Java 8中的多个字段和计数

Java inline Double条件和值解装箱崩溃

在bash中将数组作为Java程序的参数传递

Jakarta CDI强制bean构造/注册遗留事件侦听器

Log4j与jdk21兼容吗?

如何从日期中截取时间并将其传递给组件?

Sack()步骤中的合并运算符未按预期工作

如何使用路径过渡方法使 node 绕圆旋转?

S数学.exp的相同错误保证也适用于StrictMath.exp吗?

在应用getCellFormula()时,Excel引用中的文件名始终为";[1]";使用Apache POI()

在实例化中指定泛型类型与不指定泛型类型之间的区别

在Java Spring JPA中插入包含对其他实体的引用的列

OAuth:登录后无法查看Google邮箱地址

Java递归泛型是否可以被视为继承和重写的语法糖

整数->;双取消框,但双->;int不';t开箱.为什么?

Spring Boot Security-每个端点都被403禁止,Spring记录一个BasicErrorController#错误(HttpServlet请求)

如何从指定某些字段的父对象创建子对象

Maven创建带有特定类的Spring Boot jar和普通jar