【问题标题】:Fix so that the display can show both decimal numbers and integers java修复以便显示可以同时显示十进制数字和整数 java
【发布时间】:2023-04-10 17:50:02
【问题描述】:

我对编程很陌生,我正在尝试制作一个计算器。我在 JFrame 中执行此操作,我希望在启动程序时能够显示小数点或整数,这取决于计算。

例如,5/2 = 2.5(不是 2),4/2 = 2(不是 2.0)或 3 + 4 = 7(不是 7.0)。根据结果​​,它应该能够做到这两点。非常感谢您的帮助,谢谢。

public void arithmetic_operation () {        
    switch (calculation) {
        case 1: 
            ans = num + Double.parseDouble(txfText.getText());
            txfText.setText(Double.toString(ans));
            break;
        case 2: 
            ans = num - Double.parseDouble(txfText.getText());
            txfText.setText(Double.toString(ans));
            break;
        case 3: 
            ans = num * Double.parseDouble(txfText.getText());
            txfText.setText(Double.toString(ans));
            break;
        case 4: 
            ans = num / Double.parseDouble(txfText.getText());
            txfText.setText(Double.toString(ans));
            break;
    }
}

private void btnDivisionActionPerformed(java.awt.event.ActionEvent evt) {                                        
    num = Double.parseDouble(txfText.getText());
    calculation = 4;
    txfText.setText("");
    lblRes.setText(num + "/");
} 

【问题讨论】:

    标签: java swing integer double


    【解决方案1】:

    您可能想查看DecimalFormatNumberFormatterJFormattedTextField

    您的代码可能如下所示:

    String formatPattern = "####.##"
    NumberFormatter numberFormatter = new NumberFormatter( new DecimalFormat( formatPattern ) );
    formatter.setValueClass( Double.class );
    DefaultFormatterFactory formatterFactory = new DefaultFormatterFactory( numberFormatter );
    JFormattedTextField formattedTextField = new JFormattedTextField();
    

    特别注意formatPattern 参数。这定义了格式化字符串时应用的模式。此特定模式将在小数点前最多显示四位数字,在小数点后最多显示两位数。剩余的零将被切断,翻译如下:

    • 3.14 --> 3.14
    • 3.14159 --> 3.14
    • 3.0 --> 3

    另请注意,此模式中的 . 不是文字点,而是取决于语言环境的小数分隔符。

    如果您想定义自己的模式,请查看文档:

    https://docs.oracle.com/javase/8/docs/api/java/text/DecimalFormat.html


    您现在拥有所有必要的工具。继续使用它们来组合解决方案。

    【讨论】:

    • 如何在我当前的代码中实现这一点?我不明白,我需要我的数学方程式能够从显示器中获取双数,然后将其作为带或不带小数点的字符串输出,这取决于计算。它只是说它不能转换为双精度,或者不能转换为字符串。
    • 1) stackoverflow.com/questions/25615754/… 2) 然后把你等式的结果放到JFormattedTextField中,按照你的意愿显示。
    • 我仍然遇到无法转换的问题,当我按下 = 按钮时出现错误,java.lang.UnsupportedOperationException: Not supported yet。仍然不是我想要的结果。
    • 所以谷歌这意味着什么以及如何解决它。这就是我们开发人员所做的。您得到的两个答案基本上都为您提供了完整解决方案的不同版本。我对逐步调试您的代码并提供个性化辅导零兴趣。
    • 对我来说,阅读一些教程似乎会让你受益,所以看看这里的例子:docs.oracle.com/javase/tutorial/uiswing/components/… 或这里:java2s.com/Tutorials/Java/Java_Swing/… 并努力理解 i> 那里发生了什么。
    【解决方案2】:

    通常我会做这样的事情:

    //supposed the ans is 2.50 
    BigDecimal number = new BigDecimal("2.50");  
    System.out.println(number.stripTrailingZeros().toPlainString());
    

    查看更多:https://www.tutorialspoint.com/java/math/bigdecimal_striptrailingzeros.htm

    【讨论】:

      猜你喜欢
      • 2014-05-24
      • 1970-01-01
      • 1970-01-01
      • 2011-02-18
      • 1970-01-01
      • 2011-03-22
      • 2021-09-18
      相关资源
      最近更新 更多