はじめましてVC++の初心者です。
String型で表示されるtextBoxの文字配列をdouble型の変数にし、この変数に計算処理をしようとしています。
for(int i=0; i<textBox1->Lines->Length; i++){
double a=Convert::ToDouble(textBox1->Lines[i]);
double b=0.5*a;
c =Convert::ToString(b);
textBox2->Text=c;}
上記ではaaが一つの値しか持たず、textBox2にはtextBox1のi番目の数(最後の数)の0.5倍しか表記されません。
String型の文字配列をdouble型の配列へ変更し、0〜iまで一括計算しString型へ戻したいです。
書籍やWebで探してみましたが力不足で解決策が見つかりませんでした。ご教授よろしくお願いします。
↑aaではなくaでした;;
VC++2005 WFAで作っています。
拙い文章で申し訳ないです(><。)
TextBoxのMultiLineをtextBox1->Lines->Lengthで取得できるんですね。
今までMultiLineを使ってLine毎取得する事がなかったんで勉強に
なりました(^^;;;
で、本題ですが、
>textBox2にはtextBox1のi番目の数(最後の数)の0.5倍しか表記されません。
はその通りです。コード見る限りtextBox2->Text=c;としてますので
最後の値しか反映されないでしょう。
>0〜iまで一括計算しString型へ・・・
こんな感じ?(結果がどのようになるのか分からないので勝手な想像で
書いてます。)
※尚、コンパイル、動作確認はしてない(レス時に直接書いてるので)ので
意図しない動作になるかもしれません。あくまで参考程度に。
double dblValue = (double)0.0;
String ^strMoji = "";
for ( int i = 0; i < textBox1->Lines->Length; i++ ) {
try {
dblValue = Convert::ToDouble(textBox1->Lines[i]->ToString()) * (double)0.5;
strMoji = String::Concat(strMoji, Convert::ToString(dblValue));
if ( i < textBox1->Lines->Length - 1 )
strMoji = String::Concat(strMoji, "\r\n");
} catch( System::Exception ^ex ) {
//エラー時どうする?(変換不可な文字があったりとか?)
}
}
textBox2->Text = strMoji;
#数値変換はInt::Phaseでもできたような・・・イイか(^^;;;
- WFAってなんですか?
- for-loop中、毎回 textBox2->Text = c しているのだから最後の値しか残らないのはアタリマエ。
- Convert::ToDouble()で変換できない文字が入っていたときのコトが考慮されていない。
>- WFAってなんですか?
Windows フォーム アプリケーション
だったりして。
まぁ、こんな略し方しませんけど。
それと、本当にdouble型でいいのかな。
場合によっては、System::Decimalも考えていたほうがよさそう。
>Convert::ToDouble
dobule::TryParseってのもあります。
>>- WFAってなんですか?
> Windows フォーム アプリケーション
> だったりして。
あー…
↓変換できない行は"?"に置き換えてみた。
void 変換汁(System::Object^ sender, System::EventArgs^ e) {
System::Collections::Generic::List<System::String^> results;
for each ( System::String^ line in textBox1->Lines ) {
double value;
results.Add(double::TryParse(line, value) ? (value*0.5).ToString() : "?");
}
textBox2->Lines = results.ToArray();
}
>>皆様へ
勝手に言葉を作ってたみたいです、ごめんなさい…。
WFAはWindows フォーム アプリケーションのことですm(T0T)m
また数字だけを読み込むので読み込みでエラーは起らないはずです(^^)♪
たくさんのことを考慮してくださって感激ですッ!!
Parse TryParse Convertを使い変換することは自分で調べて勉強してました。丁寧に教えてくださってほんとにありがとうございます。考えているような処理ができました♪♪
>モーヲタ様
正常に意図している動作をしました♪ありがとうございます!
Lines[i]をToStringで読み取るんですね…ほんとに目から鱗です♪
ありがとうございます!このような返答がすぐに思いつくのはすごいです!!
>Blue様
ご指摘ありがとうございます!恥ずかしいかぎりです。
System::Decimalは符号や浮動小数点値を考慮するときに使う??
とりあえず今回はdoubleでいきます!まだまだ勉強不足ですね…;;
>επιστημη様
確かに今考えてみると最後の値しかでないのは当たり前ですね(^^;;
私が初心者なのも原因ですが非常に勉強になります。
ほんとうにありがとうございます!試してみたんですがかなり早いですね。
一つ一つ調べて自分のものにしますッ♪
> System::Decimalは符号や浮動小数点値を考慮するときに使う??
double型は浮動小数点型ということで、誤差が発生してしまいます。
ですので10進型であるDecimalを使えば誤差なく計算できるかなと。
(範囲が狭いですけど)
今のところ誤差が問題…ってことはないです。
これから必要になるかもなんで助かります♪
もっとたくさん勉強して質問に答えられる人を目指しますッ!!!
ありがとうございます!
ツイート | ![]() |