超初心者的質問 文字数制限について

タグの編集
投稿者 ゆあ  () 投稿日時 2008/3/27 11:25:00
はじめまして、管理人さん貴重なスペースすみません。 
2、3ヶ月前からこのサイトで少しずつ勉強させていただいている者ですが、今回プログラムを組むにあたり行き詰っていることがあり、管理人さんをはじめ皆さんに知恵を貸していただけないかと思い、書き込ませていただきました。 
 
まず、今使用しているのはVB2005です。 
 
電卓の一機能であるπ『PI』(Windowsのアクセサリーの電卓にもついている)つまりは円周率のことで困っています。 
 
というのも、『PIというBottonをクリックすると、ラベル1に円周率が表示される』というものを作りたくてコーディングしていて、下記のように書いてみました。 
 
Private Sub PI_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PI.Click 
        Dim P As Single 
        P = 3.1415926535897931 
        Label1.Text = P 
    End Sub 
 
(なぜ変数Pを用意しているのかは私もよくわからないのですが、私が初心者なのか、変数を使用しないとデータ型の定義ができない/する必要がないのかもしれませんが/からだと思います) 
()書きについてはこんな感じなのでおいといて… 
 
遅くなりましたが、はじめに言った困っていることというのは、今回のコードのように円周率を数字キーで『3.1415926535897932384626433832795』と入力しても改行して次のコードを打ち始めると(VBの修正機能みたいのもので)途中で打ち切られて『3.1415926535897931』となってしまいます。 
データ型をほかのものに変えてもだめだったので、もしかしたらもともとこんなに連続して入力してはいけない(文字数制限)とか何かあるのでしょうか? 
 
夜中に長々と失礼しました。 
説明が下手でわかりにくかったりしたらすみません。 
どなたか教えていただければ幸いです。
投稿者 うたひこ  () 投稿日時 2008/3/27 11:49:00
こんにちは。 
 
 
 
> データ型をほかのものに変えてもだめだったので、もしかしたらもともとこんなに連続して入力してはいけない(文字数制限)とか何かあるのでしょうか? 
 
入力してはいけない、というより、扱えない桁数なんです。 
 
 
 
詳しくは 
 
初級講座の第四回 変数と型 
 
をご覧下さい。 
 
 
 
また、プログラムの中で変更する予定のない数値は、定数として「const」で宣言することをオススメします。 
 
 
 
おまけに、ただ文字列として表示するだけでいいならば(計算に使わないならば)string型として宣言すれば、かなりの桁数が入力できます。 
 
 
 
更には、πは予めフレームワークの中にMATH.PIとして宣言されています。
投稿者 ゆあ  () 投稿日時 2008/3/27 12:55:00
早速のご回答ありがとうございます。 
 
> 入力してはいけない、というより、扱えない桁数なんです。  
詳しくは  
初級講座の第四回 変数と型  
をご覧下さい。  
 
ここに投稿する前にも読んできましたが、再度確認してきました。 
初級講座第4回 変数と型 
3.型 
で間違いないでしょうか(データ型が詳しく表になっているところ) 
そこによると、(数え間違えがあったらすみません;) 
 
Double→long程度の長さ(つまり19桁前後) 
Single→Integer程度の長さ(つまり10桁くらい) 
 
こうなっており、私の表示させたい桁数は32桁くらいなので、無理だということでしょうか? 
 
だとすると、アクセサリーについている関数電卓のほうのPIをおすと沢山の桁がきちんと表示されるように作るのは無理ということなのでしょうか… 
 
>また、プログラムの中で変更する予定のない数値は、定数として「const」で宣言することをオススメします。  
 
実は…本にも書いてあったのですが、普通に 
const 定数名 as データ型 
とすると、定数名の値を設定してくださいといわれてしまい、変数と同じようにその下に 
定数名 = 3.141… 
と打ってもエラーは消えないままで…; 
お恥ずかしいことに、定数の設定もできないみたいなんです。 
 
>おまけに、ただ文字列として表示するだけでいいならば(計算に使わないならば)string型として宣言すれば、かなりの桁数が入力できます。  
 
書き忘れ?てすみません、後ほど計算に使用するので; 
たぶん、はじめにString型にして沢山の桁数を入力しても、計算の前にデータ型を変えてしまったら、また途中で円周率は切れてしまうんですよね… 
 
 
>更には、πは予めフレームワークの中にMATH.PIとして宣言されています。  
 
本当に初心者ですみません、フレームワークもなんだか知らなくて調べているうちに時間がたってしまったのですが、たぶんあらかじめある程度は定義されているものなんですよね、教えていただいたように円周率をそのまま打つのではなくMATH.PIとかえたら表示はされるようになりました☆ 
ありがとうございます。 
 
しかし、アクセサリーにあるような表示はどうやったらできるのかいまだに解決しません… 
 
せっかくすぐに回答いただけたのにすみません。
投稿者   () 投稿日時 2008/3/27 17:32:00
こんにちは。 
 
>実は…本にも書いてあったのですが、普通に  
const 定数名 as データ型  
とすると、定数名の値を設定してくださいといわれてしまい、変数と同じようにその下に  
定数名 = 3.141…  
と打ってもエラーは消えないままで…;  
お恥ずかしいことに、定数の設定もできないみたいなんです。  
 
定数は宣言すると同時に値をセットしなくてはいけないので 
宣言の後からセットしたり変更することはできません。 
なので 
 
Const PI as Single = 3.14159・・・ 
 
のようにすればいいかと思います。 
 
32桁ぐらいの値を使っての計算方法は 
自分は分かりませんでした^^;
投稿者 よねKEN  () 投稿日時 2008/3/27 19:42:00
>>2 
 
Dim P As Decimal = 3.1415926535897932384626433832795D 
Label1.Text = P.ToString() 
' 結果は以下のように末尾3桁は丸められてしまいますが・・・ 
' 3.1415926535897932384626433833 
 
 
のようにすれば、SingleやDoubleよりは多くの桁を表現できます。 
パイの値を受ける変数をDecimal型に、定数値にはDecimal型であることを示すために末尾に"D"を付けるのがポイントです。 
 
ただ、これでもアクセサリの電卓のPIよりも精度は低くなります。 
アクセサリの電卓は通常の型で扱える精度よりも大きな精度を扱えるように自前で多倍長演算を実装しているのでしょう。 
つまり、多くの桁を扱えるように"自分で"作りこむ必要があります。 
 
キーワード:多倍長演算
投稿者 ゆあ  () 投稿日時 2008/3/28 07:54:00
鍵さんへ 
 
>定数は宣言すると同時に値をセットしなくてはいけないので 宣言の後からセットしたり変更することはできません。 なので  
 
Const PI as Single = 3.14159・・・  
 
のようにすればいいかと思います。  
 
ご回答ありがとうございました。 
定数は変数とは違いいっきに値をセットしなくてはならなかったのですね。 
初めて知りました(見落としていただけなのかもしれませんが;) 
 
>32桁ぐらいの値を使っての計算方法は  
自分は分かりませんでした^^;  
 
それでも、今回定数についての書き込みをいただけて、とても勉強になりました。 
ありがとうございました☆ 
 
 
 
よねKENさんへ 
  
実際のコードの記述感謝します。早速してみたいと思います。 
今までよりは少しでも多くの桁数を使用し、計算の正確さ(円周率の細かさ)を高くできそうなのでよかったです。 
 
 
>ただ、これでもアクセサリの電卓のPIよりも精度は低くなります。  
アクセサリの電卓は通常の型で扱える精度よりも大きな精度を扱えるように自前で多倍長演算を実装しているのでしょう。  
つまり、多くの桁を扱えるように"自分で"作りこむ必要があります。  
 
 
とてもじゃないですが、そこまではできそうにありませんので、今回教えていただいたものを使用させていただきたいと思います。 
 
 
 
今回知恵を貸してくださった皆様、貴重なスペースを貸してくださった管理人様、本当にありがとうございました☆ 
これからも頑張りたいと思います。 
そしてまたお世話になるときがありましたら、そのときはよろしくお願いします。