C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: For nextについて


(過去ログ 26 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■12183 / inTopicNo.1)  For nextについて
  
□投稿者/ ドラゴン (11回)-(2008/01/03(Thu) 14:24:40)

分類:[VB.NET/VB2005] 

三度目の質問ですが、
今回はFor...Nextを使って 銀行預金額を計算するというプログラム作成にあたっていたのですが
2週間ほど、手詰まりをしております

Dim StartAge1 As Single '銀行預金を始めた年齢
Dim StopAge1 As Single '銀行預金を終えた年齢
Dim AnDepo1 As Single '毎年の預金額
Dim IntRate1 As Double '銀行利子
Dim Age As Single '年
Dim IRA As Single '利子のパーセンテージ
Dim Profit As Single '利子増加額

StartAge1 = Val(StartAge.Text) '銀行預金開始時の年齢
StopAge1 = Val(StopAge.Text) '銀行預金を終えた年齢
AnDepo1 = Val(AnDepo.Text) '毎年の預金額
IntRate1 = Val(IntRate.Text) / 100 '利子を100で割ってパーセンテージ化に




For StartAge1 = StartAge.Text To StopAge.Text '銀行預金開始した年から終える年まで計算(開始時を1とする)

Age = StartAge1 + (StopAge1 - StartAge1) '銀行預金開始してから終了するまでの年数を計算
AnDepo1 = AnDepo1 * Age '毎年の預金額×
IRA = AnDepo1 + Profit '合計預金額+利子
Profit = (AnDepo1 * IntRate1) '銀行の預金額を利子分割って、利子による増加額を計算


Result.Text = Result.Text & Age & vbTab & AnDepo1 & vbTab & IRA & vbTab & vbTab & Profit & vbNewLine '結果として、X歳時の合計預金額、合計預金+利子、合計利子を表示する

Next

End Sub

問題点1: Ageの数値が全て同じ()
問題点2: 利子が小数点2個以内に納まらない

引用返信 編集キー/
■12184 / inTopicNo.2)  Re[1]: For nextについて
□投稿者/ επιστημη (762回)-(2008/01/03(Thu) 14:48:31)
επιστημη さんの Web サイト
> 問題点1:   Ageの数値が全て同じ()

     Age = StartAge1 + (StopAge1 - StartAge1) '銀行預金開始してから終了するまでの年数を計
         = StartAge1 + StopAge1 - StartAge1
         = StopAge1

  ... そりゃそーだ。

> 問題点2:   利子が小数点2個以内に納まらない

 小数点2個以内に納める処理はどこですか? どこにも見当たりませんけど。


引用返信 編集キー/
■12185 / inTopicNo.3)  Re[1]: For nextについて
□投稿者/ 通りすがり (10回)-(2008/01/03(Thu) 16:49:05)
型とかまったく意識できてないし。
掲示板で聞く前の段階だと思う。
引用返信 編集キー/
■12191 / inTopicNo.4)  Re[1]: For nextについて
□投稿者/ Jitta (444回)-(2008/01/03(Thu) 21:46:02)
Jitta さんの Web サイト
No12183 (ドラゴン さん) に返信
> 三度目の質問ですが、
> 今回はFor...Nextを使って 銀行預金額を計算するというプログラム作成にあたっていたのですが
> 2週間ほど、手詰まりをしております
>
> Dim StartAge1 As Single '銀行預金を始めた年齢
> Dim StopAge1 As Single '銀行預金を終えた年齢
> Dim AnDepo1 As Single '毎年の預金額
> Dim IntRate1 As Double '銀行利子
> Dim Age As Single '年
> Dim IRA As Single '利子のパーセンテージ
> Dim Profit As Single '利子増加額

 Single って。。。いや、まぁ、いいんだけど。。。


> StartAge1 = Val(StartAge.Text) '銀行預金開始時の年齢
> StopAge1 = Val(StopAge.Text) '銀行預金を終えた年齢
> AnDepo1 = Val(AnDepo.Text) '毎年の預金額

 TextBox.Text は「文字」です。Single は「数値」です。数値と文字は違うものです。
どっちかというと、Single.TryParse を使ってほしい。。。


> IntRate1 = Val(IntRate.Text) / 100 '利子を100で割ってパーセンテージ化に

 ん。。。まぁ、あれです。デバッガで、IntRate1 がいくらになっているか、確認してください。
おそらく、IntRate には、3% なら "3" という数値を入れていると思います。
すると、これは「整数」に変換されます。
割る数である 100 も整数です。ここは、「整数÷整数」の計算が行われ、結果が「整数」で取り出されます。
その後、IntRate1 の型である Double に変換されます。結果、0.0 になっていると思います。



>
> For StartAge1 = StartAge.Text To StopAge.Text '銀行預金開始した年から終える年まで計算(開始時を1とする)

 文字を、ある文字から他の文字まで、変化させることはできません。
(まぁ、VB は、勝手に変換してくれたりしちゃうんだ)



> Age = StartAge1 + (StopAge1 - StartAge1) '銀行預金開始してから終了するまでの年数を計算

 (StopAge1 - StartAge1) が負数だったら、どうします?
で、「銀行預金を始めた年齢+(銀行預金を終えた年齢−銀行預金を始めた年齢)」は、「銀行預金を終えた年齢」と同じになっていると思うのですが、どうでしょう?



> AnDepo1 = AnDepo1 * Age '毎年の預金額×
> IRA = AnDepo1 + Profit '合計預金額+利子
> Profit = (AnDepo1 * IntRate1) '銀行の預金額を利子分割って、利子による増加額を計算

 んっと。。。ここって、こんな計算でいいんです?
あ、Age の計算が間違っているんだった。



>
>
> Result.Text = Result.Text & Age & vbTab & AnDepo1 & vbTab & IRA & vbTab & vbTab & Profit & vbNewLine '結果として、X歳時の合計預金額、合計預金+利子、合計利子を表示する

 ん。。。String.Format 使ってください。



>
> Next
>
> End Sub
>
> 問題点1: Ageの数値が全て同じ()
> 問題点2: 利子が小数点2個以内に納まらない
>
引用返信 編集キー/
■12201 / inTopicNo.5)  Re[2]: For nextについて
□投稿者/ 未記入 (145回)-(2008/01/04(Fri) 20:48:21)
理屈で理解できない状況だと思われるので Option Strict On にして潰すところから始めることをお勧めします。
引用返信 編集キー/
■12249 / inTopicNo.6)  Re[2]: For nextについて
□投稿者/ よねKEN (98回)-(2008/01/06(Sun) 04:52:51)
部分的にツッコミ。

No12191 (Jitta さん) に返信
>> IntRate1 = Val(IntRate.Text) / 100 '利子を100で割ってパーセンテージ化に
>
>  ん。。。まぁ、あれです。デバッガで、IntRate1 がいくらになっているか、確認してください。
> おそらく、IntRate には、3% なら "3" という数値を入れていると思います。
> すると、これは「整数」に変換されます。

Val関数は基本的にDouble型を返す関数ですので、整数には変換されていないのではないでしょうか。
#Option Strict Offで、入力が1桁の数字の場合、
#Val(IntRate.Text)がひょっとしたら整数を返すかもしれませんが、その辺は未検証です。

> 割る数である 100 も整数です。ここは、「整数÷整数」の計算が行われ、結果が「整数」で取り出されます。
> その後、IntRate1 の型である Double に変換されます。結果、0.0 になっていると思います。

VBの / 演算子は小数同士の演算ですので、整数 / 整数はDouble / Doubleとして処理されます。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -