检查Java的十进制格式是否正确

检查Java的十进制格式是否正确,java,decimalformat,Java,Decimalformat,我正在用java创建一个预算程序,需要检查用户是否输入了有效的美元金额,特别是小数点后2位。关于如何做到这一点,没有任何规范 这是我目前的尝试,但逻辑是错误的 aExpense5.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String desc = aExpense3.getText(); String va

我正在用java创建一个预算程序,需要检查用户是否输入了有效的美元金额,特别是小数点后2位。关于如何做到这一点,没有任何规范

这是我目前的尝试,但逻辑是错误的

  aExpense5.addActionListener(new ActionListener()
  {
     public void actionPerformed(ActionEvent e)
     {
        String desc = aExpense3.getText();
        String value = aExpense4.getText();
        double fValue = 0;

        try
        {
           fValue = Double.valueOf(value);
        }
        catch (NumberFormatException d)
        {
           JOptionPane.showMessageDialog(null, "Invalid Number1");
        } 
           double dValue = (fValue * 10) % 10;

           if (dValue <= 0)
           {
              updateExpenseList(desc, fValue);
           }
           else
           {
              JOptionPane.showMessageDialog(null,"invalid Number");
           }
     }
  });
aExpense5.addActionListener(新ActionListener()
{
已执行的公共无效操作(操作事件e)
{
字符串desc=aExpense3.getText();
字符串值=aExpense4.getText();
双fValue=0;
尝试
{
fValue=Double.valueOf(值);
}
catch(NumberFormatException d)
{
showMessageDialog(null,“无效数字1”);
} 
双D值=(F值*10)%10;
如果(d值尝试以下操作:

if (fValue*100 == (int)(fValue*100)) { 
    //fValue had 2 decimal places or less 
}
如果
fValue=0.11
那么
fValue*100=11
。那么你就得到了
11==(int)11
,它是
真的

如果
fValue=0.111
那么
fValue*100=11.1
。那么您将得到
11.1==(int)11.1
,它是
false

尝试以下操作:

if (fValue*100 == (int)(fValue*100)) { 
    //fValue had 2 decimal places or less 
}
如果
fValue=0.11
那么
fValue*100=11
。那么你就得到了
11==(int)11
,它是
真的

如果
fValue=0.111
,那么
fValue*100=11.1
。因此,您可以使用
11.1==(int)11.1
,这是
false

您可以使用正则表达式:

if (value.matches("\\d*\\.\\d\\d")) {
    // the number string has two decimal places
}
此正则表达式允许可选的整数部分,“.05”将匹配。

您可以使用正则表达式:

if (value.matches("\\d*\\.\\d\\d")) {
    // the number string has two decimal places
}
此正则表达式允许可选的整数部分,“.05”将匹配