便士计算器mod分裂

时间:2014-04-27 22:01:00

标签: vb.net

我有一个初学者VB课程的作业,我已经找了一个便士计算器的例子并阅读了它们并试图找出我出错的地方。我有一个文本框,其中包含您想要弄清楚的便士数量。如果您输入101便士,则返回1美元和1便士。

奇怪的是它可以达到137便士。这回来了1美元1季度1硬币2便士。如果它达到138或更高,它只是搞砸了。如果我输入138,我得到1美元,2个季度,1个角钱,1个镍币,3个便士。如果我使用17,我得到1个四分之一,2个硬币,1个镍,2个便士。

这是我的代码的算术部分。

    DolBack = intLeftOver / 100
    intLeftOver = intLeftOver Mod 100
    LblDolRes.Text = DolBack.ToString

    QrtBack = intLeftOver / 25
    intLeftOver = intLeftOver Mod 25
    LblQrtRes.Text = QrtBack.ToString

    DimBack = intLeftOver / 10
    intLeftOver = intLeftOver Mod 10
    LblDimRes.Text = DimBack.ToString

    NicBack = intLeftOver / 5
    intLeftOver = intLeftOver Mod 5
    LblNicRes.Text = NicBack.ToString

    PenBack = intLeftOver
    LblPenRes.Text = PenBack.ToString

我试图查看我的代码并查看其他示例,但显然我做的有点不同。如果有人能指出我的代码中的明显重大缺陷或我的做法,我将不胜感激。

进一步澄清我已经查看了帖子 Penny Calculator 显然,与实际算术存在一些差异。在给出的链接是因为这是唯一的方法,没有舍入问题?

一美元有100便士,四分之一有25便士,一角硬币10便士,镍硬币便士5便士。

编辑:感谢您的帮助并指出我的错误。很感激。

2 个答案:

答案 0 :(得分:1)

你是对的,这是一个舍入错误。使用

DolBack = intLeftOver \ 100

而不是

DolBack = intLeftOver / 100

(和其他的相同),你会看到一个非常不同的结果。

原因是/运算符将执行浮点除法,无论其中任何一侧的值如何,因此38/25将得出1.52的答案,向上舍入(如您所怀疑)当分配回变量时,该变量被定义为整数。另一方面,\运算符将执行整数除法,截断而不是舍入。

答案 1 :(得分:1)

Math.DivRem方法有助于解决此类问题。

    Dim dollars As Integer
    Dim fifty As Integer
    Dim quarter As Integer
    Dim dime As Integer
    Dim nickel As Integer
    Dim pennies As Integer = 137

    dollars = Math.DivRem(pennies, 100, pennies)
    fifty = Math.DivRem(pennies, 50, pennies)
    quarter = Math.DivRem(pennies, 25, pennies)
    dime = Math.DivRem(pennies, 10, pennies)
    nickel = Math.DivRem(pennies, 5, pennies)