[英]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
格式的輸出。
同樣,應該使用DecimalFormat
的parse()
方法根據相同的規則來解析顯示字段。
我希望這個能幫上忙...
傑夫
我找到了一個相當“簡單”或骯臟的解決方案,它似乎可以工作:
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.