0

紙のコストを計算するこのプログラムがあります。まず、価格とバンドルが宣言され、初期化されます。次に、除算とモジュロを使用したif elseステートメントを使用して、バンドルを課金レートに分解します。紙の束の金額は正しく計算されていますが、総費用はオフになっています。誰かが私がここで間違っていることを見つけることができますか?

Module Paper
Sub Main()

    'declare variables
    Dim PaperAmountReq As Double
    Dim PricePer_1_Sheet As Double = 0.1
    Dim PricePer_100_Sheets As Double = 0.055
    Dim PricePer_500_Sheets As Double = 0.04
    Dim PricePer_1000_Sheets As Double = 0.03
    Dim NumberOfSingles As Double = 0
    Dim NumberOf100s As Double = 0
    Dim NumberOf500s As Double = 0
    Dim Numberof1000s As Double = 0

    Dim TotalCost As Double


    Console.Write("Enter number of sheets of paper needed: ")
    PaperAmountReq = Console.Readline


    If PaperAmountReq / 1000 >= 1 Then
        Numberof1000s = PaperAmountReq \ 1000
        PaperAmountReq = PaperAmountReq Mod 1000

    End If

    If PaperAmountReq / 500 >= 1 Then
        NumberOf500s = PaperAmountReq \ 500
        PaperAmountReq = PaperAmountReq Mod 500

    End If

    If PaperAmountReq / 100 >= 1 Then
        Numberof100s = PaperAmountReq \ 100
        PaperAmountReq = PaperAmountReq Mod 100

    End If

    If PaperAmountReq / 1 = PaperAmountReq Then
        NumberOfSingles = PaperAmountReq

    End If

    'TotalCost = (Convert.ToDouble(Numberof1000s) * PricePer_1000_Sheets) + (Convert.ToDouble(NumberOf500s) * PricePer_500_Sheets) + (Convert.ToDouble(Numberof100s) * PricePer_100_Sheets) + (Convert.ToDouble(NumberOfSingles) * PricePer_1_Sheet)
    TotalCost = (Numberof1000s * PricePer_1000_Sheets) + (NumberOf500s * PricePer_500_Sheets) + (Numberof100s * PricePer_100_Sheets) + (NumberOfSingles * PricePer_1_Sheet)


    Console.WriteLine("Number of 1000 packages: " & Numberof1000s)
    Console.WriteLine("Number of 500 packages: " & Numberof500s)
    Console.WriteLine("Number of 100 packages: " & Numberof100s)
    Console.WriteLine("Number of singles packages: " & NumberOfSingles)
    Console.Write("Total Cost: " & TotalCost)

End Sub

エンドモジュール

4

4 に答える 4

2

これとともに:

If PaperAmountReq / 1000 >= 1 Then
    Numberof1000s = PaperAmountReq \ 1000
    PaperAmountReq = PaperAmountReq Mod 1000

End If

1500がある場合は、Numberof1000s1000ではなく1に設定します。したがって、合計コストを計算するとき、(おそらく)コスト/シートの値は1000ではなく1で乗算されます。

ここで方程式を変更してください

TotalCost = (Numberof1000s * PricePer_1000_Sheets) + (NumberOf500s * PricePer_500_Sheets) + (Numberof100s * PricePer_100_Sheets) + (NumberOfSingles * PricePer_1_Sheet)

のようなものになる

TotalCost = (Numberof1000s * PricePer_1000_Sheets * 1000) + (NumberOf500s * PricePer_500_Sheets * 500) + (Numberof100s * PricePer_100_Sheets * 100) + (NumberOfSingles * PricePer_1_Sheet * 1)

PricePer_XXX_Sheetsまたは、値を同等の値になるように調整します。

Dim PricePer_1_Sheet As Double = 0.1
Dim PricePer_100_Sheets As Double = 0.055 * 100
Dim PricePer_500_Sheets As Double = 0.04 * 500
Dim PricePer_1000_Sheets As Double = 0.03 * 1000
于 2012-09-27T16:59:42.353 に答える
2

変数の数は整数にする必要があります。PaperAmountReqのように十分に大きくない場合は、bigintegersにする必要があります。

あなたのコードはこれらのセグメントで整数除算を想定しているようです

If PaperAmountReq / 500 >= 1 Then          
  NumberOf500s = PaperAmountReq \ 500          
  PaperAmountReq = PaperAmountReq Mod 500 
End if   

実際には、doubleを使用しているため、浮動小数点除算を実行しています。

価格にdoubleではなくdecimalを使用することもお勧めしますか?および総コスト変数。

ダブルスは非常に正確ですが、多くの場合非常に不正確です。

于 2012-09-27T17:08:49.097 に答える
0

NumberOfXXXs変数をバンドルではなくシートに変換する必要があるようです。

最後の式では、バンドルごとの数値でシートごとのコストを使用します。バンドルごとのコストを更新するか、バンドル番号を更新して、そのバンドル内のシートのラウンド数と等しくします。

TotalCost = NumberOf1000s * 1000 * PricePer_1000_Sheets
于 2012-09-27T17:08:27.957 に答える
0
Dim PricePer_100_Sheets As Double = 0.055 
Dim PricePer_500_Sheets As Double = 0.04 
Dim PricePer_1000_Sheets As Double = 0.03 

する必要があります

Dim PricePer_100_Sheets As Double = 0.055 * 100
Dim PricePer_500_Sheets As Double = 0.04 * 500
Dim PricePer_1000_Sheets As Double = 0.03 * 1000
于 2012-09-27T17:14:11.077 に答える