簡體   English   中英

嘗試從文本字段讀取格式化的雙精度型

[英]Trying to read a formatted double from text field

我正在制作一個簡單的計算器,目前正在嘗試解決非整數問題。

有一個文本字段displayField顯示結果和操作員按鈕以及一個相等的按鈕。

可以正常工作的是,雙精度結果僅在有小數位的情況下顯示小數位,但我無法將結果返回到計算中。

public class FXMLDocumentController implements Initializable {

private String operator;
double oldValue;
double newValue = 0;
NumberFormat nf = new DecimalFormat("##.###");

@FXML
private TextField displayField;

@Override
public void initialize(URL url, ResourceBundle rb) {
    // TODO
}

@FXML
private void handleDigitAction(ActionEvent event) {
    String digit = ((Button) event.getSource()).getText();
    String oldText = displayField.getText();
    String newText = oldText + digit;
    displayField.setText(newText);
}

@FXML
private void handleOperator(ActionEvent event) {
    oldValue = Double.parseDouble(displayField.getText());
    displayField.setText("");
    operator = ((Button) event.getSource()).getText();
}

@FXML
private void handleEqualAction(ActionEvent event) {

    switch (operator) {
        case "+":
            newValue = oldValue + Double.parseDouble(displayField.getText());
            break;
        case "-":
            newValue = oldValue - Double.parseDouble(displayField.getText());
            break;
        case "*":
            newValue = oldValue * Double.parseDouble(displayField.getText());
            break;
        case "/":
            newValue = oldValue / Double.parseDouble(displayField.getText());
            break;
        default:
            break;
    }

    displayField.setText(String.valueOf(nf.format(newValue)));
}

}

例如,當我嘗試首先計算5/2,得到結果2,5,然后按下操作員按鈕時,就會發生錯誤。 因此,我假設我只需要使用一個附加對象來保存結果,或者只更改從文本字段讀取的行(這樣它也適用於這種更改的格式),但是我不知道如何操作。

您能否告訴我們您的應用程序在哪個語言環境上運行?

執行

System.out.println(Locale.getDefault()); 

當您使用NumberFormat (或其子類DecimalFormat )的format()方法時,您碰巧正在使用默認的Locale或通過該方法的Locale ,具體取決於所使用的重載。 結果,您將獲得Locale格式的輸出。

同樣,應該使用DecimalFormatparse()方法根據相同的規則來解析顯示字段。

我希望這個能幫上忙...

傑夫

我找到了一個相當“簡單”或骯臟的解決方案,它似乎可以工作:

    NumberFormat nf = new DecimalFormat("##.###", new DecimalFormatSymbols(Locale.US));

您可能正在使用DecimalFormat類來格式化輸出。 十進制格式器使用默認的Locale ,在您的情況下為de_DE 如以上答案中所述,您可以使用DecimalFormat類的重載方法以所需格式獲取輸出。

例如

BigDecimal numerator = new BigDecimal(5);
BigDecimal denominator = new BigDecimal(2);

//In current scenario
    Locale locale = new Locale("de", "DE");
    NumberFormat format = DecimalFormat.getInstance(locale);
    String number = format.format(numerator.divide(denominator));
    System.out.println("Parsed value is "+number); 

The output here will be 2,5

如果更改為:

    Locale localeDefault = new Locale("en", "US");
    NumberFormat formatDefault = DecimalFormat.getInstance(localeDefault);
    String numberVal = formatDefault.format(numerator.divide(denominator));
    System.out.println("Parsed value is "+numberVal); 

   Output here will be 2.5

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM