在java中它没有正确计算

时间:2013-09-16 17:23:49

标签: java string integer

尝试从整数到字符串计算我的作业然后正确生成

基本上我正在尝试为我的作业做的事情是在课堂上进行,老师希望我们使用基本的扫描仪并询问用户输入,我宁愿在文本区域和文本区域中进行操作

所以对于我的程序我有一个文本字段询问用户总价格是多少

我认为使用新行计算总计到文本区域

出于某种原因我采取转换方式取得美元金额并将其分解为他们需要多少账单和硬币的方式在这里没有正确显示下面有转换

       public void actionPerformed(ActionEvent e) {

    // This class is being made to get the formula or what needs to be done

    // leaving this as tfAnswer even though its the value of dollar
    sDollarTotal = tfAnswer.getText();
    iDollarTotal = Double.valueOf(sDollarTotal);

    // Converting Distance to integer from string
    iTen = (int) (iDollarTotal / 10);
    sTen = String.valueOf(iTen);

    // calc the five bucks dude
    iFives = (int) ((iDollarTotal - iTen * 10) / 5);  //take the int  use the modules operator

    sFive = String.valueOf(iFives);

    // take the whole number and the whole number 

    iOne = (int) (((iDollarTotal - iTen * 10 - iFives * 5)));
    sOne = String.valueOf(iOne);

    iQuarter = (int) ((iDollarTotal - iTen * 10 - iFives * 5 - iOne) / 0.25);
    sQuarter = String.valueOf(iQuarter);

    iDime = (int) ((iDollarTotal - iTen * 10 - iFives * 5 - iOne - iQuarter * 0.25) / .10);
    sDime = String.valueOf(iDime);

    iNickel = (int) ((iDollarTotal - iTen * 10 - iFives * 5 - iOne
            - iQuarter * 0.25 - iDime * .10) / .05);
    sNickel = String.valueOf(iNickel);

    iPenny = (int) ((iDollarTotal - iTen * 10 - iFives * 5 - iOne
            - iQuarter * 0.25 - iDime * .10 - iNickel * .05) / .01);
    sPenny = String.valueOf(iPenny);

    textArea.setText(sTen + " Ten Dollar Bill" + "\n" + sFive
            + " Five Dollar Bills" + "\n" + sOne + " One dollar bill \n"
            + sQuarter + " Quarters \n" + sDime + " Dimes \n" + sNickel
            + " Nickels \n" + sPenny + " Pennys \n");

}

现在,当用户输入25.46美分的数字时,它会显示 2几十 1五 0个 1季度 2角钱 0个镍币 1便士

但是当用户输入25.56时,它会显示

2十 1五 0个 0季度 0角钱 1镍 0 pennys

显然不对。我尝试使用模块运算符,但我无法弄清楚正确使用它的公式,所以我以这种方式将其分解,

任何人都可以告诉我为什么当我使用25.56它显示0便士。

1 个答案:

答案 0 :(得分:0)

我建议你不要在这里使用double,因为这显然让你很困惑。

如果要使用double,则应始终对结果进行舍入而不是向下舍入。另外,由于无法准确表示0.1和0.01和0.05,因此应避免使用它们。

    int iPenny = (int) Math.round((iDollarTotal - iTen * 10 - iFives * 5 - iOne
            - iQuarter * 0.25 - iDime / 10.0 - iNickel / 20.0) * 100);
在这种情况下,

打印出正确的结果。


但是,我仍然建议你一开始。

long cents = Math.round(Double.parseDouble(tfAnswer.getText()) * 100);

之后,您不需要使用任何浮点。