本当に初歩的なのですが(1+2=12) への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 トマト  (小学生)
投稿日時
2009/8/25 22:19:12
>TextBox1.Text = TextBox1.Text + TextBox2.Text
TextBox1.Text = TextBox1.Text + + TextBox2.Text にすると自動的にDoubleに変換されて計算できるみたいです。
TextBox1.Text = TextBox1.Text + + TextBox2.Text にすると自動的にDoubleに変換されて計算できるみたいです。
投稿者 (削除されました)  ()
投稿日時
2009/8/25 22:18:20
(削除されました)
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2009/8/25 09:14:42
データ型はとても重要です。
今回のような問題を避けるため、+ 演算子による加算処理を行う際には、
その対象となるデータが、共に数値型である事を確認するよう心がけましょう。
特に、「数値 + 文字列」といった型の混在は避けるようにしてください。
また、文字列の連結として使う場合には、加算処理と区別するために
TextBox3.Text = TextBox1.Text & TextBox2.Text
のように「& 演算子」を用いる事をお奨めします。
> 本当に初歩的なのですが
初歩といえば初歩なのですが、こうした型の違いは、初心者のうちは
意外と見落としやすいものかと思います。
また、上級者になればなるほど、型を意識したコーディングを心がけるため、
異なるデータ型同士の + 演算となると、上級者でも混乱してしまうようです。
以前、データ型混在の + 演算というネタで、下記のような VB クイズを
出題したことがあるのですが、ベテランの VB 開発者であっても、
これらを正しく即答できた人は意外と少なかったです。
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Q. 変数 A の値が 1530 となる物を全て挙げてください。
1: A = "15" + 15 + 15
2: A = "15" + (15 + 15)
3: A = "15" + "15" + "15"
4: A = "15" + ("15" + 15)
5: A = ("15" + "15") + 15
6: A = "15" + (("15") + ("15"))
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Q. 変数 A, B は、いずれも 1530 という値になります。
では、各結果の型は、それぞれ何になるでしょうか。
A = "15" & "15" + 15
B = "15" + "15" + 15
TextBox1.Text = TypeName(A)
TextBox2.Text = TypeName(B)
1: 整数型
2: 長整数型
3: 単精度浮動小数点数型
4: 倍精度浮動小数点数型
5: 文字列型
6: その他
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
今回のような問題を避けるため、+ 演算子による加算処理を行う際には、
その対象となるデータが、共に数値型である事を確認するよう心がけましょう。
特に、「数値 + 文字列」といった型の混在は避けるようにしてください。
また、文字列の連結として使う場合には、加算処理と区別するために
TextBox3.Text = TextBox1.Text & TextBox2.Text
のように「& 演算子」を用いる事をお奨めします。
> 本当に初歩的なのですが
初歩といえば初歩なのですが、こうした型の違いは、初心者のうちは
意外と見落としやすいものかと思います。
また、上級者になればなるほど、型を意識したコーディングを心がけるため、
異なるデータ型同士の + 演算となると、上級者でも混乱してしまうようです。
以前、データ型混在の + 演算というネタで、下記のような VB クイズを
出題したことがあるのですが、ベテランの VB 開発者であっても、
これらを正しく即答できた人は意外と少なかったです。
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Q. 変数 A の値が 1530 となる物を全て挙げてください。
1: A = "15" + 15 + 15
2: A = "15" + (15 + 15)
3: A = "15" + "15" + "15"
4: A = "15" + ("15" + 15)
5: A = ("15" + "15") + 15
6: A = "15" + (("15") + ("15"))
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Q. 変数 A, B は、いずれも 1530 という値になります。
では、各結果の型は、それぞれ何になるでしょうか。
A = "15" & "15" + 15
B = "15" + "15" + 15
TextBox1.Text = TypeName(A)
TextBox2.Text = TypeName(B)
1: 整数型
2: 長整数型
3: 単精度浮動小数点数型
4: 倍精度浮動小数点数型
5: 文字列型
6: その他
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
投稿者 七氏  (学生)
投稿日時
2009/8/25 09:09:11
>>魔界の仮面弁士さん
使っているのはVB2008でした。記述せずに質問してしまい申し訳ありません。
「文字列 + 数値」や「数値 + 文字列」の場合に計算できるということで、数値として処理するために
Val(TextBox1.Text)というように表記したところ、うまく計算することができました。
このような質問にお答えいただき、本当にありがとうございました。
使っているのはVB2008でした。記述せずに質問してしまい申し訳ありません。
「文字列 + 数値」や「数値 + 文字列」の場合に計算できるということで、数値として処理するために
Val(TextBox1.Text)というように表記したところ、うまく計算することができました。
このような質問にお答えいただき、本当にありがとうございました。
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2009/8/25 09:01:12
まず、「数値 + 数値」が「数値」なのは当然ですね。
問題は、文字列が混じった場合かと思います。
VB の場合、「文字列 + 文字列」は「文字列」となります。
そのため、"1" + "2" は、"12" となります。
一方、「文字列 + 数値」や「数値 + 文字列」の場合には数値演算となります。
(数値に変換できない文字が含まれているとエラーとなります)
> これを3にするにはどうしたらいいのでしょうか?
入力された値を『数値』にすれば良いことになります。
VB.NET であれば、TextBox の代わりに NumericUpDown を使う事ができます。
Text プロパティの代わりに、Value プロパティを使うことで、数値を得ることができます。
NumericUpDown3.Value = NumericUpDown1.Value + NumericUpDown2.Value
あるいは、CInt や CDec 関数などを用いて、文字列を数値に変換するという手もあります。
もし、数値以外の入力がありえる場合には、Decimal.TryParse メソッド等を用いると良いでしょう。
問題は、文字列が混じった場合かと思います。
VB の場合、「文字列 + 文字列」は「文字列」となります。
そのため、"1" + "2" は、"12" となります。
一方、「文字列 + 数値」や「数値 + 文字列」の場合には数値演算となります。
(数値に変換できない文字が含まれているとエラーとなります)
> これを3にするにはどうしたらいいのでしょうか?
入力された値を『数値』にすれば良いことになります。
VB.NET であれば、TextBox の代わりに NumericUpDown を使う事ができます。
Text プロパティの代わりに、Value プロパティを使うことで、数値を得ることができます。
NumericUpDown3.Value = NumericUpDown1.Value + NumericUpDown2.Value
あるいは、CInt や CDec 関数などを用いて、文字列を数値に変換するという手もあります。
もし、数値以外の入力がありえる場合には、Decimal.TryParse メソッド等を用いると良いでしょう。
投稿者 (削除されました)  ()
投稿日時
2009/8/25 08:50:15
(削除されました)
投稿者 (削除されました)  ()
投稿日時
2009/8/25 08:46:53
(削除されました)
投稿者 七氏  (学生)
投稿日時
2009/8/25 08:22:03
初歩的な質問で申し訳ありません。
TextBox1とTextBox2があり、TextBox1に1を入れてTextBox2に2を入れます。
その後、ボタンをクリックしてTextBox1+TextBox2をTextBox1に書き込みます。
するとTextBox1には12と出てしまうのですが、これを3にするにはどうしたらいいのでしょうか?
TextBox1.Text = TextBox1.Text + TextBox2.Text
と処理しています。
原因はTextBoxがStringだからなのでしょうか?
回答いただけると助かります。よろしくお願いします。
TextBox1とTextBox2があり、TextBox1に1を入れてTextBox2に2を入れます。
その後、ボタンをクリックしてTextBox1+TextBox2をTextBox1に書き込みます。
するとTextBox1には12と出てしまうのですが、これを3にするにはどうしたらいいのでしょうか?
TextBox1.Text = TextBox1.Text + TextBox2.Text
と処理しています。
原因はTextBoxがStringだからなのでしょうか?
回答いただけると助かります。よろしくお願いします。
>TextBox1.Text = TextBox1.Text + + TextBox2.Text にすると自動的にDoubleに変換されて計算できるみたいです。
Option Strict Off(暗黙の型変換を許可)の設定の場合ですね。
1つ目の+はニ項演算子の+で、2つ目の+は単項演算子で、
以下のような意味として解釈されるからですね。
(TextBox1.Text="1"、TextBox2.Text="2"として説明)
"1" + + "2"
↓
"1" + (+ "2")
↓
"1" + (+2)
↓
"1" + 2
↓
1 + 2