Java 如何使用逗号和欧元符号将双精度格式设置为其他格式
我有一个变量:Java 如何使用逗号和欧元符号将双精度格式设置为其他格式,java,number-formatting,Java,Number Formatting,我有一个变量: private double classicpreis = 2.5; 我想把它变成这样: private double classicpreis = 2,5 €; 2,50 € public class Bestellterminal { private double Preis = 0; private double classicpreis = 2.50; classic.addActionListener(new ActionListener() {
private double classicpreis = 2.5;
我想把它变成这样:
private double classicpreis = 2,5 €;
2,50 €
public class Bestellterminal {
private double Preis = 0;
private double classicpreis = 2.50;
classic.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Preis = Preis + classicpreis;
Locale currentlocale = Locale.GERMANY;
NumberFormat numberFormatter =
NumberFormat.getCurrencyInstance(currentlocale);
String classicpreisx = numberFormatter.format(classicpreis);
String preisx = numberFormatter.format(Preis);
JLabel.setText(String.valueOf("Summe: " + preisx));
}});
}
我以为用double可以用逗号,但没用。那么我如何才能做到这一点呢
编辑
我想将其输出为如下内容:
private double classicpreis = 2,5 €;
2,50 €
public class Bestellterminal {
private double Preis = 0;
private double classicpreis = 2.50;
classic.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Preis = Preis + classicpreis;
Locale currentlocale = Locale.GERMANY;
NumberFormat numberFormatter =
NumberFormat.getCurrencyInstance(currentlocale);
String classicpreisx = numberFormatter.format(classicpreis);
String preisx = numberFormatter.format(Preis);
JLabel.setText(String.valueOf("Summe: " + preisx));
}});
}
您可以将数字作为字符串常量写入代码中,并使用您选择的语言环境将其解析为double。但是,这个欧洲符号让我相信,你根本不应该使用双精度,而应该使用十进制类。你不能改变语言本身,如果你想声明双精度值,你总是需要在代码内部写小数点
但是,有多种方法可以使用逗号而不是点打印值,例如在应用程序用户看到的显示中 因此,您应该始终使用当前的语言环境格式,例如,如果用户在德国,则应打印逗号。Java库中有自动的过程来实现这一点,如图所示:或 要使用的类是
NumberFormat
或DecimalFormat
,下面是一个小示例:
Locale currentLocale = ...
NumberFormat numberFormatter = NumberFormat.getNumberInstance(currentLocale);
double value = 2.5;
String formattedValue = numberFormatter.format(value);
System.out.println("Formatted value is: " + value);
现在,输出会根据您为currentLocale
设置的内容而变化。可以使用locale.getDefault()
获取当前区域设置,但也可以直接从不同区域选择区域设置,例如使用locale
中定义的常量,如locale.dermany
您还可以应用十进制模式创建数字,如
1.004,34
。因此,模式为,##0.00
,可以这样使用:
String pattern = "#,##0.00";
DecimalFormat decimalFormatter = (DecimalFormat) numberFormatter; // The one from above
decimalFormatter.applyPattern(pattern);
String formattedValue = decimalFormatter.format(value);
使用格式模式,您还可以添加
€
符号,只需将其添加到模式中即可。最简单的解决方案是使用
或者,让它完成所有的格式化
假设你有
double preis = 2.5;
然后你可以做一个例子
Locale locale = Locale.GERMANY;
NumberFormat numberFormat = NumberFormat.getCurrencyInstance(locale);
String s = numberFormat.format(preis);
您将获得“2,50欧元”
请注意,格式会考虑所有细节(使用十进制)
逗号或点、所选货币符号、数字前后的货币、,
之间的空格数)取决于您使用的语言环境。
示例:对于Locale.GERMANY
您将获得“2,50欧元”
,
对于Locale.US
您可以获得“$2.50”
,对于Locale,英国
您可以获得“$2.50”
,现在运行良好。我的工作代码如下所示:
private double classicpreis = 2,5 €;
2,50 €
public class Bestellterminal {
private double Preis = 0;
private double classicpreis = 2.50;
classic.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Preis = Preis + classicpreis;
Locale currentlocale = Locale.GERMANY;
NumberFormat numberFormatter =
NumberFormat.getCurrencyInstance(currentlocale);
String classicpreisx = numberFormatter.format(classicpreis);
String preisx = numberFormatter.format(Preis);
JLabel.setText(String.valueOf("Summe: " + preisx));
}});
}
谢谢你们的帮助 小数点与逗号是一个表示问题。代码仍然需要使用小数点。但是当您想要输出值时,您可以根据需要对其进行格式化。在代码本身中,还是作为字符串?对于代码本身,您将无法在其中使用逗号或货币符号作为值的一部分。如果您确实需要逗号,则使用String
代替,您无法更改语言本身,在代码内部您将始终需要写入小数点。但是,有多种方法可以使用逗号而不是点打印值。因此,您应该始终使用当前的语言环境格式,例如,如果用户在德国,则应打印逗号。Java库中对此有自动处理,如图所示:它只用于输出。在代码本身中,它可以是点。我只是想知道如何以正确的方式格式化它。非常感谢你对我的帮助。我的代码现在运行良好。非常感谢您对我的帮助。我的代码现在运行良好。