DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ToStringを使った際の数値の丸めについて

環境/言語:[環境 XP .NET2.0]
分類:[.NET]

再度お世話になります。
さきほどの質問の続きなのです。
ToStringで小数は出でてくるようになりましたが、結果が丸められている
データが出てきてしまいました。
6桁必要なのですが、7桁目が丸められています。
例 0.000087 > 0.000088

目的は7桁目切捨ての値だったのですが、丸めのはずし方はないでしょうか?


以下、現在のコーディングです。

Dim wk As Single
Dim strColumn As String
〜〜〜〜〜〜〜〜〜〜〜〜〜

wk = "小数点付きの値"

strColumn = "INSERT INTO TABLE01(項目1,項目2,項目3)

strColumn = strColumn & " VALUES('" & DR1(0) & "','" & wk.ToString("0.000000") & "','" & DR1(1) & "')"
見苦しいですが、私の知りうる限りの最適解です。

Dim wk As Decimal = "小数点付きの値"
(Math.Floor(wk * 100000) * 0.00001).ToString("0.00000")

ちなみに数値を Decimal 型にしないと、(wk * 100000) の時点で誤差が発生します。

もっと美しい方法がありそうですが・・・見識ある方の出現を待ちましょう。
■No25088に返信(HIPONさんの記事)
> ToStringで小数は出でてくるようになりましたが、結果が丸められている
> データが出てきてしまいました。
> 6桁必要なのですが、7桁目が丸められています。
> 例 0.000087 > 0.000088
>
> 目的は7桁目切捨ての値だったのですが、丸めのはずし方はないでしょうか?
>
> Dim wk As Single
> Dim strColumn As String

なぜ、そうなるのかの理由が分からないと、本当の解決しないですよね。

小数点以下の、それぞれの桁数です。
・Double  14桁
・Single  6桁
・Decimal 最大28桁

Single型は、小数 6桁までなんですから、7桁目は丸められます。
あとは、どうすればいいか分かりますよね?
ひらぽんさん、やじゅさんありがとうございます。

singleでは、6桁目が丸められるんですね。

全部Decimalで計算するようにして、丸めがでないようになりました。



ひらぽんさん、やじゅさんありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板