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

わんくま同盟

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

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


■98015 / )  Re[2]: TextBoxのフォーマット
□投稿者/ たかし (27回)-(2021/08/25(Wed) 13:18:05)
No98014 (大谷刑部 さん) に返信
> ■No98010 (たかし さん) に返信
>>いつもお世話になっております、たかしです。
>>VB.NETの質問なのですが、TextBoxのフォーマットを「12,345,678」にするために、
>>次のようなコードを書いてみたのですが、
>>TextBoxの値が「12,345」となって桁が3つ飛んでしまいます。
>>どこが間違いなのでしょうか?どなたか教えて下さい。
>>
>>  TextBox.Text = CStr(Val(TextBox1.Text) + Val(TextBox2.Text) + Val(TextBox3.Text))
>
> 飛ぶというより、3つのテキストボックスの値の三桁以内の整数であると仮定すると、
> val関数通した時点で数値になり、+演算子は足し算にになりますよね。
> 8桁の整数にはなり得ないです。
>
>> If TextBox.Text = "" Then
>>   Exit Sub
>> Else
>>   TextBox.Text = String.Format("{0:##,###,###}", CLng(TextBox.Text))
>> End If
>>
>
> 弁さんの指摘通りTextBox.Text = ""には絶対になりません。
> val関数かけた時点でNothig(vbNullstring)、empty等は全部0に変換されてしまいますから。
>
> 12,345,678としたいのであれば、まず+演算をした時点で、TextBox.Textの値が12345678となっているのを確認する必要がありますよね?
>
> そもそも、+演算子は足し算か文字列連結かどちらの意図で使おうとしてますか?
> それによって解が変わる気がします。
>

皆さん、どうもありがとうございます。

> そもそも、+演算子は足し算か文字列連結かどちらの意図で使おうとしてますか?

もちろん足し算です。If以下を消して、

TextBox.Text = CStr(Val(TextBox1.Text) + Val(TextBox2.Text) + Val(TextBox3.Text))

とした時点で、既に下3桁が表示されません。

TextBox.Text = Val(TextBox1.Text) + Val(TextBox2.Text) + Val(TextBox3.Text)

としても全く同じです。

そもそも下3桁が「飛ぶ」理由が分からないのです。
String.Format("{0:##,###,###}", CLng(TextBox.Text))では下3桁のない数値にカンマが付きます。

そこで苦し紛れに
TextBox.Text = Val(TextBox1.Text)*1000 + Val(TextBox2.Text)*1000+ Val(TextBox3.Text)*1000
などとやると当然ながら下3桁は「000」となり全く意味がわかりません。




返信 編集キー/


管理者用

- Child Tree -