-6

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

基本上我想要为我的家庭作业做的是提前上课,老师希望我们使用基本的扫描仪并要求用户输入,我宁愿在文本字段和文本区域中进行

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

我认为用新行将总数计算到文本区域中

出于某种原因,我将美元金额分解为他们需要多少钞票和硬币的转换方式并没有正确显示,下面有转换

       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 便士

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

谁能告诉我为什么当我使用 25.56 时它显示 0 便士。

4

1 回答 1

0

我建议你不要在这里使用 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);

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

于 2013-09-16T17:32:23.697 回答