选择该货币后,将欧元转换为另一种货币,输入金额(以欧元为单位),结果使用逗号作为小数点

问题描述 投票:0回答:1

我正在编写一个代码,用户可以选择一种货币,程序会将欧元金额转换为所选货币。我遇到的唯一两个问题是,首先,我希望计算在用户按 Enter 键后进行,其次,我希望结果具有以下格式“1234,56”,换句话说,而不是使用分隔小数点的典型句点,我希望它是逗号。

这是我到目前为止所做的。 (这可行,但缺少上面提到的两件事)

PS:转化率已经给我了,不是我选的。

private void onAction(ActionEvent event) {
        do{
            try{
                double conversor = 0;
                String euros = ValorEuros.getText();
                double cantEuros = 
                        Double.parseDouble(euros.replace(',','.'));
                if(!ValorEuros.getText().equals("") && 
                        (Libra.isSelected() || Dolar_americano.isSelected() 
                        || Rupia_india.isSelected() || 
                        Yuan_chino.isSelected())){
                    if(Libra.isSelected()){
                        conversor = cantEuros * 0.88;
                    }
                    else if(Dolar_americano.isSelected()){
                        conversor = cantEuros * 1.19;
                    }
                    else if(Rupia_india.isSelected()){
                        conversor = cantEuros * 80.22;
                    }
                    else{
                        conversor = cantEuros * 7.5;
                    }
                }
                DecimalFormat df = new DecimalFormat("#.###");
                String redondeado = df.format(conversor);
                ResultadoConversion.setText(redondeado);
            } catch(NumberFormatException e){ResultadoConversion.setText("Error en formato de número");}
        }while(isSelected(event));
    }

    @FXML
    private boolean isSelected(ActionEvent event) {
        return event.isConsumed();
    }

    @FXML
    private boolean onKeyPressed(KeyEvent event) {
        return event.getCode() == KeyCode.ENTER;
    }
javafx
1个回答
0
投票

输入后执行操作

我假设您的输入是

TextField
。如果是这种情况,那么您所需要做的就是设置字段的
onAction
处理程序。

someTextField.setOnAction(e -> {
    // do something...
});

在所有平台上,当用户在文本字段获得焦点时按下 Enter 时,将调用此处理程序。


格式化

您可以使用

DecimalFormatSymbols
自定义格式的某些部分使用的字符。例如以下内容:

import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.Locale;

public class Main {

  public static void main(String[] args) {
    var symbols = new DecimalFormatSymbols(Locale.ROOT);
    symbols.setDecimalSeparator(',');

    var formatter = new DecimalFormat("0.00", symbols);
    System.out.println(formatter.format(1234.56));
    System.out.println(formatter.format(5.3));
    System.out.println(formatter.format(117));
    System.out.println(formatter.format(0.42));
  }
}

输出:

1234,56
5,30
117,00
0,42

如果您只想为小数点分隔符设置

,
并使用相对简单的模式,那么上面的代码应该可以正常工作。但这种方法对用户不太友好,除非您知道每个预期用户都会同意将
,
视为货币值的小数分隔符。理想情况下,您应该考虑用户的区域设置和/或者,如果实现的努力值得的话,允许用户在应用程序中选择区域设置。

货币

格式化货币时,通常应在用户的区域设置中对其进行格式化,无论格式化的货币类型如何。在输出中包含货币的本地化符号可能是个好主意。这两件事都有助于防止用户感到困惑。

您可以通过

DecimalFormat
直接使用适当的模式来实现此目的,但没有理由重新发明轮子。您可以使用
NumberFormat#getCurrencyInstance(Locale)
获取给定区域设置的货币格式化程序。一旦有了格式化程序,您就可以在其上设置适当的
Currency
。例如:

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

public class Main {

  public static void main(String[] args) {
    var currency = Currency.getInstance("USD");
    test(currency, Locale.US);
    test(currency, Locale.FRANCE);
  }

  static void test(Currency currency, Locale locale) {
    var formatter = NumberFormat.getCurrencyInstance(locale);
    formatter.setCurrency(currency);
    System.out.printf(
        "[Currency = %s, Locale = %s]: %s%n", currency, locale, formatter.format(1234.56));
  }
}

输出:

[Currency = USD, Locale = en_US]: $1,234.56
[Currency = USD, Locale = fr_FR]: 1 234,56 $US

请注意相同货币在两个区域设置之间的格式有何不同。

© www.soinside.com 2019 - 2024. All rights reserved.