[英]NumberFormat.getCurrencyInstance() not returning currency symbol for Locales CHINA and FRANCE (jdk-1.8)
I have written a program to return double values with the currency symbols of some countries.我编写了一个程序,用某些国家的货币符号返回双精度值。 For this I am using
getCurrencyInstance()
method to get symbol of particular country.为此,我使用
getCurrencyInstance()
方法来获取特定国家/地区的符号。
The problem is specific to my laptop's JDK-1.8 and works fine on online compiler.该问题特定于我的笔记本电脑的JDK-1.8 ,并且在在线编译器上运行良好。 The problem, I am facing is that the currency symbol for CHINA and FRANCE are represented with '?'.
我面临的问题是中国和法国的货币符号用“?”表示。 But for INDIA and US , correct symbols are shown.
但对于INDIA和US ,会显示正确的符号。
I am working on this problem for a bit now.我现在正在研究这个问题。 Hence, any leads would be helpful.
因此,任何线索都会有所帮助。
Here is my code:这是我的代码:
import java.util.Scanner;
import java.text.NumberFormat;
import java.util.Locale;
public class Solution {
public static void main(String[] args) {
/* Read input */
Scanner scanner = new Scanner(System.in);
double payment = scanner.nextDouble();
scanner.close();
/* Create custom Locale for India.
Locale indiaLocale = new Locale("en", "IN");
/* Create NumberFormats using Locales */
NumberFormat us = NumberFormat.getCurrencyInstance(Locale.US);
NumberFormat india = NumberFormat.getCurrencyInstance(indiaLocale);
NumberFormat china = NumberFormat.getCurrencyInstance(Locale.CHINA);
NumberFormat france = NumberFormat.getCurrencyInstance(Locale.FRANCE);
/* Print output */
System.out.println("US: " + us.format(payment));
System.out.println("India: " + india.format(payment));
System.out.println("China: " + china.format(payment));
System.out.println("France: " + france.format(payment));
}
}
The corresponding output on my machine is:我机器上对应的output是:
12324.134
US: $12,324.13
India: Rs.12,324.13
China: ?12,324.13
France: 12 324,13 ?
for china use this code.对于中国,请使用此代码。 Numberformat class's getCurrency().getSymbol(locale) will return currency symbol for particular region.
Numberformat 类的 getCurrency().getSymbol(locale) 将返回特定地区的货币符号。
System.out.println("China: " + china.getCurrency().getSymbol(Locale.CHINA) + china.format(payment));
For France use this System.out.println("France: " + france.format(payment) + " " + france.getCurrency().getSymbol(Locale.FRANCE));
对于法国,请使用此
System.out.println("France: " + france.format(payment) + " " + france.getCurrency().getSymbol(Locale.FRANCE));
The problem in Hackerrank challenge is that there is no UTF-8 encoding. Hackerrank 挑战中的问题是没有 UTF-8 编码。 Try to use this:
尝试使用这个:
import java.util.Scanner;
import java.text.NumberFormat;
import java.util.Locale;
public class Solution {
public static void main(String[] args) {
/* Read input */
Scanner scanner = new Scanner(System.in);
double payment = scanner.nextDouble();
scanner.close();
/* Create custom Locale for India.*/
Locale indiaLocale = new Locale("en", "IN");
/* Create NumberFormats using Locales */
NumberFormat us = NumberFormat.getCurrencyInstance(Locale.US);
NumberFormat india = NumberFormat.getCurrencyInstance(indiaLocale);
NumberFormat china = NumberFormat.getCurrencyInstance(Locale.CHINA);
NumberFormat france = NumberFormat.getCurrencyInstance(Locale.FRANCE);
/* Print output */
try {
System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out), true, "UTF-8"));
System.out.println("US: " + us.format(payment));
System.out.println("India: " + india.format(payment));
System.out.println("China: " + china.format(payment));
System.out.println("France: " + france.format(payment));
} catch (Exception e) {
System.out.println("HackerRank please fix your test terminal");
}
}
}
The Solution will be like this;......解决方案将是这样的;......
For Indian Ruppe,there is no Currency.. We have to format it using decimalFormatter as given below.对于 Indian Ruppe,没有货币。我们必须使用如下所示的 decimalFormatter 对其进行格式化。
DecimalFormat IndianCurrencyFormat = new DecimalFormat("##,##,###.00");
NumberFormat nf = NumberFormat.getCurrencyInstance(Locale.US);
NumberFormat nf1 = NumberFormat.getCurrencyInstance(Locale.CHINA);
NumberFormat nf2 = NumberFormat.getCurrencyInstance(Locale.FRANCE);
String us = nf.format(payment);
String india ="Rs." + IndianCurrencyFormat.format(payment);
String china =nf1.format(payment);
String france =nf2.format(payment);
System.out.println("US: " + us);
System.out.println("India: " + india);
System.out.println("China: " + china);
System.out.println("France: " + france);
My solution just do substring get rid of UTF-8 issue我的解决方案只是让 substring 摆脱 UTF-8 问题
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;
/*
* input 12324.134
* output
* US: $12,324.13
* India: Rs.12,324.13
* China: ¥12,324.13
* France: 12 324,13 €
*/
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double payment = scanner.nextDouble();
scanner.close();
// Write your code here.
DecimalFormat formatter = new DecimalFormat("###,###.00");
double roundOff = Math.round(payment * 100) / 100.00;
String us = NumberFormat.getCurrencyInstance().format(roundOff);
String india = "Rs." + formatter.format(roundOff);
String china = NumberFormat.getCurrencyInstance(Locale.CHINA).format(roundOff);
String france_initial = NumberFormat.getCurrencyInstance(Locale.FRENCH).format(roundOff);
int len = france_initial.length();
String france = france_initial.substring(0, len - 1) + " €";
System.out.println("US: " + us);
System.out.println("India: " + india);
System.out.println("China: " + china);
System.out.println("France: " + france);
}
}
In Case if you need to set symbol for a currency or If you want to customize currency symbol, you can try this.如果您需要为货币设置符号或如果您想自定义货币符号,您可以试试这个。
Locale indialocal = new Locale("en","India"); NumberFormat india = NumberFormat.getCurrencyInstance(indialocal); DecimalFormatSymbols deciFs = new DecimalFormatSymbols(); deciFs.setCurrencySymbol("Rs."); ((DecimalFormat) india).setDecimalFormatSymbols(deciFs); System.out.println("India: " + india.format(payment));
You can also try this code, because above codes are not working on my laptop.你也可以试试这个代码,因为上面的代码在我的笔记本电脑上不起作用。 Specially for the symbol of YEN
专门用于日元的符号
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Input --> ");
double payment = scanner.nextDouble();
scanner.close();
Locale indiaLocale = new Locale("en", "IN");
NumberFormat u = NumberFormat.getCurrencyInstance(Locale.US);
NumberFormat i = NumberFormat.getCurrencyInstance(indiaLocale);
NumberFormat c = NumberFormat.getCurrencyInstance(Locale.SIMPLIFIED_CHINESE);
NumberFormat f = NumberFormat.getCurrencyInstance(Locale.FRANCE);
System.out.println("US: " + u.format(payment));
System.out.println("India: " + i.format(payment));
System.out.println("China: " + c.format(payment));
System.out.println("France: " + f.format(payment));
}
In your console -->在您的控制台中 -->
Input --> 12324.134输入 --> 12324.134
US: $1,232.13美国:1,232.13 美元
India: ₹1,232.13印度:1,232.13 卢比
China: ¥1,232.13中国:¥1,232.13
France: 1 232,13 €法国:1 232,13 欧元
If your solution doesn't work because of yen symbol, try pasting that code, but in Java 7:如果您的解决方案由于日元符号而不起作用,请尝试粘贴该代码,但在 Java 7 中:
import java.io.*;
import java.util.*;
import java.text.NumberFormat;
import java.text.DecimalFormat;
public class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Double number = sc.nextDouble();
DecimalFormat IndianCurrencyFormat = new DecimalFormat("##,##,###.00");
String formattedStr = NumberFormat.getCurrencyInstance(Locale.US).format(number);
System.out.println("US: " + formattedStr);
System.out.println("India: Rs." + IndianCurrencyFormat.format(number));
formattedStr = NumberFormat.getCurrencyInstance(Locale.CHINA).format(number);
System.out.println("China: " + formattedStr);
formattedStr = NumberFormat.getCurrencyInstance(Locale.FRANCE).format(number);
System.out.println("France: " + formattedStr);
}
}
In Java 15 that doesn't work.在 Java 15 中这是行不通的。
Its very some difficult task when working with the numbers to format currencies, By creating local instances through.getCurrencyInstances(new Locale("X", "Y")) meth for CHINA:"zh", "CN" for France: "sk", "SK" required method example:在使用数字格式化货币时,这是一项非常艰巨的任务,通过创建本地实例 through.getCurrencyInstances(new Locale("X", "Y")) meth for CHINA:"zh", "CN" for France: "sk ", "SK" 所需方法示例:
`import java.util. `导入 java.util。 ;
; import java.text.
导入 java.text。 ;
; import java.text.NumberFormat;
导入 java.text.NumberFormat;
public class Solution {公共 class 解决方案 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double payment = scanner.nextDouble();
scanner.close();
// Write your code here.
NumberFormat us1 = NumberFormat.getCurrencyInstance(new Locale("en", "US"));
String us = us1.format(payment);
NumberFormat india1 = NumberFormat.getCurrencyInstance(new Locale("en", "IN"));
String india = india1.format(payment);
NumberFormat china1 = NumberFormat.getCurrencyInstance(new Locale("zh", "CN"));
String china = china1.format(payment);
NumberFormat fr1 = NumberFormat.getCurrencyInstance(new Locale("sk", "SK"));
String fr = fr1.format(payment);
System.out.println("US: " +us);
System.out.println("India: " +india);
System.out.println("China: " +china);
System.out.println("France: " +fr);
}
}` }`
Create local variable because India haven't currency code Refer to this -https://docs.oracle.com/javase/tutorial/i18n/locale/create.html
创建本地变量,因为印度没有货币代码参考这个 -https://docs.oracle.com/javase/tutorial/i18n/locale/create.html
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
import java.text.NumberFormat;
import java.util.Locale;
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");
// Write your code here.
NumberFormat us = NumberFormat.getCurrencyInstance(Locale.US);
NumberFormat india = NumberFormat.getCurrencyInstance(indiaLocale);
NumberFormat china = NumberFormat.getCurrencyInstance(Locale.CHINA);
NumberFormat france = NumberFormat.getCurrencyInstance(Locale.FRANCE);
if(payment>=0 || payment<=Math.pow(10,9)){
System.out.println("US: " + us.format(payment));
System.out.println("India: " + india.format(payment));
System.out.println("China: " + china.format(payment));
System.out.println("France: " + france.format(payment));
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.