• ベストアンサー

CCurの引値を文字列にする時と数値にするときの違い?!

今VB6.0SP5を用いてPGを作成しているのですが、 【CCur】関数を用いて少数点の計算を行っていますが予想外の動きに戸惑っております CCurの引値に数値を指定したときと文字列をしてしたときの返値が異なるのですがどういうことなのでしょうか? 数値型  引値 0.0001 ※0.00005 0.0001 ※0.00015 0.0003 ※0.00025 0.0003 ※0.00035 0.0004 ※0.00045 0.0006 ※0.00055 0.0006 ※0.00065 0.0008 ※0.00075 0.0008 ※0.00085 0.0009 ※0.00095 文字列型       引値 0 ※0.00005 0.0002 ※0.00015 0.0002 ※0.00025 0.0004 ※0.00035 0.0004 ※0.00045 0.0006 ※0.00055 0.0006 ※0.00065 0.0008 ※0.00075 0.0008 ※0.00085 0.001 ※0.00095 ヘルプ等でも調べたのですが、引値は「オブジェクト」となっていて数値でも文字列でも構わない風なのですが返値が異なるので困っております。 文字列を指定した時は【丸め】が行われているは確認できたのですが、数値型の規則性がわかりません。 その辺りの情報をご教授お願いします。 環境 OS:Win2000 SP4 WinNT SP5 VB6.0 SP5

  • 3396
  • お礼率32% (29/90)

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

  • ベストアンサー
noname#5584
noname#5584
回答No.3

No.1さんもご指摘の通り、通貨型の計算精度は小数点以下4桁までしか保証されません。 「通貨型」の名の通り、金額の実務計算を目的としているからです。 # 数値のとき、奇数方向に丸められる原因はわかりませんが。 プログラムの利用目的がわかりませんが、科学計算や統計処理など、高精度が要求されるなら、Decimal (10進) 型を使用すべきでしょう。 (整数部分が大きくなく、小数部分で要求される桁数が変動しないのであれば、通貨型で、10000倍して計算した結果を1/10000にする、といった小細工で解決できるかもしれません) Decimalでも要求を満たせない場合は、C言語等で演算ライブラリを作成する必要があるものと思われます。

3396
質問者

お礼

ご回答ありがとうございます。 小数点以下4桁まで有効で5桁目は【丸め】か四捨五入が行われるものと思っていましたが、予想外の結果が返ってしまいました。 有効数字を小数点以下4桁までとしてしまったので、改めまして小数点以下3桁までを有効数字とすることにして対処しようと考えます。

その他の回答 (2)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

「銀行丸め」や「銀行型丸め」と呼ばれる丸め方です。 googleで検索すれば解説も出てくると思います。

3396
質問者

補足

ありがとうございます。 引値を文字列で指定した際の動きは「銀行丸め」でわかるのですが、 引値を数値型に指定した際の動きがわかりません。 おわかりになりますでしょうか?

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.1

Currency型は小数部4桁までだから

関連するQ&A

  • VBの文字列型について教えてください

    VBの文字列型についてヘルプを見てもわからないことがあります。 どなたか教えてください。 MSDNのヘルプでは、「固定長」は64kBまで、「可変長」は2GBまで、と何箇所も書いてあります。 が、どのようにしたら可変長に指定できるのかがわかりません。 最大で数MBのテキストファイル内容を1つの文字列変数に入れて扱えたら助かるんですが・・・・ お願いします。

  • Excelで数値を文字列にした時

    例えば0001の前に「’」をつけると、0001って文字列になりますよね。 で、A1に「0001」って表示されて、オートフィルを使ってドラッグすると A2以降に0002~の番号がふられます。(今回はA1:A10に0001~0010まで ふっているということで) で、この0001とか0002って文字列のはずですよね。 なのにB1のセルに=A1+A2にするとちゃんと「3」て出てくるんですよ。 でも、COUNT関数でA1:A10を指定すると「0」が表示され、COUNTA関数で A1:A10を指定すると「10」が表示されてるってことはやっぱA1:A10のデータ は文字列ですよね。 他にもフィルタオプションで「>=’0005」(シングルクォーテーションは半角) とかって指定してもちゃんと抽出されたりと、 この「’」をつけるというのは数値を完全に文字列にしているのでしょか? ご存知の方教えてください。

  • VBAで文字列を数値に変換したい

    こんにちは! システムから自動で出力されるExcelファイルがあります。そのファイルを開くと数値が文字列として認識されています。いつも数値に直しているのですが、下記の方法でなおしています。 エラー チェック機能を使用して文字列形式の数値を変換する 他にも文字列を数値になおす方法は下記URLを参考にしています。 http://office.microsoft.com/ja-jp/excel-help/HP010342308.aspx ただ、これをVBAで変換できないかと思っています。 例えば、A~G列まで文字列データがはいっています。このA~G列のデータをVBAで一気に数値化したいのですが、どのようにすればおこなえるでしょうか?

  • VBAで数値を文字列にして入力したい

    Range("A" & X).Value = Year(Date) Range("B" & X).Value = Right("0" & Month(Date), 2) このVBAでは セルの書式指定で文字列にしても 文字列の指定を外すと数値に戻ります。 でも、文字列の設定を外したら 数値に戻らないものもあり ピボットテーブルで集計した時に 同じ「2013」が2種類存在してしまいます。 どうしたらいいですか?

  • エクセル関数で文字列か数値かを判断する

    エクセルの関数で指定した場所のデータが文字列か数値かを判断させることは可能でしょうか? 可能な場合、それをIFとからめて「文字列だったら○○」「数値だったら○○」という条件をつけて処理をしたいのですが。 よろしくお願いします。

  • 数値を表示だけ特定の文字列に変換したい。

    Excelにて、セルに数値を入れた際に表示だけ特定の文字列に変換したいです。 例えば 0.5 → ”半分” 1  → ”全部” 0~1までの少数第二位までの数値 → ”ちょっと” という形にしたいです。 ただ、別のセルの計算式で値を使うため、表示だけを変更したいのです。 書式設定でできるのかと思っていましたが、うまくいきませんでした。 どなたか教えて頂けないでしょうか?

  • カンマの含まれる文字列の数値変換方法について

    VB.NETでプログラミングしています。 String型の文字列を Double型の数値に変換するときに 一般的にはVal関数を使いますが、 カンマが含まれる文字列"111,111"を 数値変換したい場合には単純にVal関数を 使用しただけではうまくいかないようです。 上の例で数値変換すると"111"になってしまうようです。 そこで質問なのですが、 何か簡単にできるうまい方法はないでしょうか? 関数があればご教示ください。 以下、Val関数の説明の抜粋です。 解説 文字列中に数字以外の文字が見つかると、Val 関数は読み込みを中止します。円記号 (\) やカンマ (,) など、通常は数値の一部と見なされる記号や文字も、Val 関数は数値として解釈しません。

  • 数値・文字列を決まった範囲の数値に変換・割り当てる(ハッシュする?)方

    数値・文字列を決まった範囲の数値に変換・割り当てる(ハッシュする?)方法について ハッシュ関数を使えば、ある文字列・数値を何らかの法則で暗号のように変換できることは分かったのですが、その変換される結果の範囲を決まった数値として指定することは可能なのでしょうか。 例えば『文字列を「1~95」の数値のどれかに割り当てたい』という感じです。 ランダムでなく、何度やっても同じ結果にしたいのです。 また、範囲は例では「1~95」としていますが、「1~230」「1~500」など自由に変更したいと思っています。 ※以前質問した占いに関連するものでして、結果の数が定まっていないため、 結果の数に応じて、元となるデータから占い結果に割り当てるということをやりたいと思っています。 ご教示いただけますようお願いします。

    • ベストアンサー
    • PHP
  • 数値 1 を文字列"01"に変換したい

    初心者です。教えて頂けますか? ある関数から出てきた配列数からファイル名を指定したいのですが、 数値 1 を文字列"01"に変換するにはどの様にすれば良いでしょうか? よろしくおねがいします。 $array = hoge(); $count = count($array); $countString = $count;//<-ここでどのようにすれば良いでしょうか? $fileName = 'hogehoge'.$countString.'.zip';

    • 締切済み
    • PHP
  • 文字変換。

    UNIXサーバより、FTPでファイルを所得し、 そのデータをEUCからシフト-JISへ変換するという処理を作成したいのですが、 Help等を見ても今一良く解かりませんので… 良いアドバイスがあったら御教授下さい。 その変換データなのですが、 数値と漢字を含む文字列が入り混じったものです。 開発環境 OS WinXP・Win2000 VB VB5.0(SP3) よろしくお願いします。

専門家に質問してみよう