• ベストアンサー

エクセルVBA データ型 SingleとDouble

SingleとDoubleともに、整数部分の範囲についてはどのように 考えればよいのでしょうか?例えば、小数点以下4桁までを正確 に計算できれば良く、変数の値が 54321.**** となる場合は Singleで良いのでしょうか? SingleとDoubleで対応できる、整数部分の範囲を教えてください。 お手数ですが、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

有効桁数で考える必要があります。Singleの有効桁数は7桁(内部的には9桁)で、負の値は -3.4028235E+38 ~ -1.401298E-45、正の値は 1.401298E-45 ~ 3.4028235E+38 の範囲の値をとります。 http://msdn2.microsoft.com/ja-jp/library/xay7978z(VS.80).aspx 54321.1234 = 5.43211234E+4 になり、有効桁数は9桁あります。この場合はDoubleでないと小数点以下7,8桁目は桁落ちします。

nonboo
質問者

お礼

ご回答ありがとうございます。

その他の回答 (4)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんにちは。 理屈では、Single ですが、私は、面倒なことを考えずに、Excelの場合は、セルの数字は、全部、Double型ですから、それに合わせて、Double 型にしてしまいますね。考えていたらキリがありませんからね。 もちろん、内容にもよります。最終出力で、小数点第4位までなら、1000倍して計算して、1000で割ればよいです。 小数のままで演算(足し算、掛け算を含めます)するときは、#3 さんの書かれている、Currency 型です。

nonboo
質問者

お礼

ご回答ありがとうございます。

  • ASIMOV
  • ベストアンサー率41% (982/2351)
回答No.4

Singleの場合の有効数字は7桁くらいです >54321.**** だと、9桁有りますので、Doubleでないと、精度が出ないと思われます >SingleとDoubleで対応できる、整数部分の範囲 有効数字(整数部と小数部を合わせた全桁数)が Single=7桁弱 Double=16桁弱

nonboo
質問者

お礼

ご回答ありがとうございます。

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.3

小数点以下下4桁まで精度が必要でしたら通貨型を使いましょう。 イミディエイトウィンドウで ?1.2*10-12 ?1.2#*10-12 ?1.2@*10-12 の結果を確かめてください 詳しくはこちら↓ 第4回 演算誤差の正体 http://pc.nikkeibp.co.jp/pc21/special/gosa/eg4.shtml

nonboo
質問者

お礼

ご回答ありがとうございます。

回答No.1

single 単精度 (-999999. ~ 999999.) double 倍精度 (-9999999999999999. ~ 9999999999999999.) 簡単に言えば singleの場合は小数点以下6桁まで doubleの場合は小数点以下14桁まで >小数点以下4桁までを正確 との事ですので、singleで十分かと思われます。

nonboo
質問者

お礼

ご回答ありがとうございます。

関連するQ&A

  • VBAのsingle,doubleのデータ型のE+,E-

    VBAのデータ型longやsingleの E+やE-は何を表しているのでしょうか? 単精度浮動小数点型 3.4028235E+38~などです。 また、single doubleはそれぞれ-3.4028~、-1.797~ などと書いてありますが、1万台で小数点以下の数値がある値、たとえば17,562.256はどのデータ型を使えばよいのでしょうか?

  • データ型 double の桁数について

    picマイコンをPICC liteと言うCコンパイラで作成しているのですが、そのPICC liteでは、データ型のdoubleは24ビットで、-3.4×10の38乗 ~ 3.4×10の38乗となっているのですが・・・この意味がさっぱりわからず何桁まで扱えるのかわかりません。 小数点以下は何桁? 整数部分は何桁? ・・・整数 小数含めて何桁まで大丈夫なのでしょうか?

  • VBAでの0のデータ型は

    VBAの初心者です。ExcelのVBAで小数点2桁の変数Xのデータ型を宣言したいのですが、このXは”0”の時もあります。 このような時はこの変数の型はどのように宣言したら良いのでしょうか、定義では、”Single”には正の範囲と負の範囲があって”0”がないようなのですが?

  • C++でのdouble型データの精度

    こんにちは。 コンパイラは、Borland C++ Compiler 5.5 を使っています。 表題の「精度」とは、 正確な値が保証される、「整数部分の桁数」+「小数点以下の桁数」 の事です。 普通、double型データの「精度」は、16桁であると認識しています。 そのため、例えば、 a=123456789012345.6 という浮動小数点数は16桁なので、正しい値が保証されるはずです。 ところが、printf("%f", d1); のようにprintf関数で表示すると、 123456789012345.593800 と表示されました。 これは、d1が正しい値を保持できていないという事です そこで、桁数を下げていった所、 a=1234567890.1 つまり、精度は11桁しかないという事になります。 何か僕が勘違いしているのでしょうか? それとも、僕が使っているコンパイラの精度が11桁しかないという事なのでしょうか? 何かお分かりの方がいらっしゃれば、是非アドバイスを頂きたいと思います。 では、よろしくお願い致します。

  • マクロ変数 single で小数点計算が狂います

    Windows8.1 エクセル2010です。 マクロを使っており、小数点の計算をしたいため、初めてsingle double の変数を使いました。 例として、 Sub シングル() Dim 足される As Single Dim 足す As Single Dim 合計 As Single 足される = Range("a1").Value 足す = Range("b1").Value 合計 = 足される + 足す Range("c1").Select ActiveCell.FormulaR1C1 = 合計 End Sub A1=2.1 B1=5.1 普通は7.2となるのですが、7.19999980926513 と出ました。 doubleに変数を切り替えたら、ちゃんと7.2と出ました。 singleの仕組みがよくわかりません。 有効桁数数は「7桁」なら、小数点第7位まで扱える…という単純なものではないのでしょうか?

  • VBA小数点以下3桁設定の判定方法を教えてください

    Excel Vbaで小数点以下3桁の設定がされているか判断する方法を教えてください。 小数点以下3桁の設定がされているのか知りたくて、対象セルの NumberFormat の値を「0.000」か「0.000_」で比較してもうまくいかない場合があります。その値が小数点以下ちょうど3桁の有限小数の場合は小数点以下3桁の設定をしても、NumberFormat の値は「General」のままであるのがその理由みたいです(?)。「General」を比較の値に採用しても3桁であるかの情報が得られそうにないと思えるので困っています。小数点以下3桁の有限小数であるかの判定方法を別途用意するしかないのでしょうか。その場合は、簡単で正確な判定方法を教えてください。ちなみに小数は8桁以内の整数と8桁以内の整数の商(割り算)になります。 よろしくお願いします。

  • Excel97 演算精度

    Excel97 のセルに値を入れてある計算を行っているのですが、 セルの書式で小数点以下を30桁(MAX)にすると、小数点以下の 桁が14桁までしか表示されません。 15桁~30桁までは0が並びます。 15桁~30桁まで値を表示させるにはどうしたら良いでしょうか?

  • VBAの変数変換のことです

    VBAの変数変換のことです 整数変数=実数変数や実数変数=整数変数でCIntやCSng関数を使わないでOKでしょうか? Dim VAR(20) As Single '単精度浮動小数点数型 (Single) Dim IVARO(20) As Integer '整数型 (Integer) Dim IVAROC(20) As Integer '整数型 (Integer) IVARO(NCD) = VAR(NCD) 'Single to Integer IVAROC(NCD) = CInt(VAR(NCD)) 'Single to Integer これで、IVARO(NCD)とIVAROC(NCD)には同じ値が入っているのですが、 整数=実数でCInt関数を使わないで整数にする構文はOKでしょうか?

  • excelでの数値切り捨て、桁制限をひとつのセルで

    数字を入力した時に、切り捨てと同時に、桁数を揃えることは可能でしょうか 具体的には、 (入力) 12.34  →  012 整数が2桁あるので、小数点以下を切り捨て、頭に「0」をつけ3桁にする        1.23  →  1.2 整数が1桁なので、小数点以下第二位を切り捨て、3桁(3文字?)にする         0.12  →  .12 整数が「0」なので、小数点以下を3桁(3文字)を表示する となるようにしたいです。 入力規則で、[>9.99]0##;[>.99]#.#; と入れて試してみたのですが この場合、入力が「34.56」「3.45」等であると、切り捨てて欲しい部分を四捨五入してしまい (入力) 34.56 → 035   (034になってほしい)       3.45 → 3.5     (3.4になってほしい) となってしまいます。良い方法はあるでしょうか

  • エクセルの計算について質問です

    エクセルの計算について質問です 数値の計算で、電卓で算出した値とエクセルで計算した値とが異なり困ってます。 【計算内容】 A(整数) × B(小数部2桁) = C(整数) ※Cは小数点以下切捨てとしたい ※エクセル計算ではROUNDDOWNを使用 【実際の計算結果】 (1)10,000,010,000.00 × 9999.99 = エクセル:99,999,999,999,999、電卓:99,999,999,999,999 (2)10,000,010,000.01 × 9999.99 = エクセル:100,000,000,000,000、電卓:99,999,999,999,999.9999 (1)は電卓とエクセルで結果は一致しますが、(2)は一致しません。 エクセルで小数点以下第4位が丸められてるようです。 【エクセルで算出したい値】 (2)ではDに999,999,999,999と出力したいです。 関数INTやROUNDDOWNを使ってみたのですが、うまくいきませんでした。 セルCの書式設定と、どの関数を使用すればよいのか教えていただけると大変助かります。

専門家に質問してみよう