C# と VB.NET の質問掲示板
ASP.NET、C++/CLI、Java 何でもどうぞ
C# と VB.NET の入門サイト
Re[2]: VB.Netでの小数の値
(過去ログ 87 を表示中)
掲示板トップ
C# と VB.NET 入門
新規作成
利用方法/規約
トピック表示
ランキング
記事検索
過去ログ
[トピック内 3 記事 (1 - 3 表示)] <<
0
>>
■51922
/ inTopicNo.1)
VB.Netでの小数の値
▼
■
□投稿者/ Ya
(1回)-(2010/07/26(Mon) 16:13:01)
分類:[VB.NET/VB2005 以降]
開発環境
OS:WindowsVista
言語:VisualStudio2008 VB.Net
上記環境で
@4.98 = System.Math.Floor((4.975 * 100) + 0.5) / 100
の答えを出したいのですが、
A4.97 = System.Math.Floor((4.975 * 100) + 0.5) / 100
となってしまいます。
@の値を取得したいのですが、
(4.975 * 100)の計算値が497.49999999999994
となるため、Aの値しか取れません。
原因または対処方をご存じであれば
お教えください。
よろしくおねがいします。
引用返信
編集キー/
編集
■51925
/ inTopicNo.2)
Re[1]: VB.Netでの小数の値
▲
▼
■
□投稿者/ 魔界の仮面弁士
(1718回)-(2010/07/26(Mon) 16:36:18)
■
No51922
(Ya さん) に返信
> 4.98 = System.Math.Floor((4.975 * 100) + 0.5) / 100
今回の場合、データ型が問題になっています。
> 対処方をご存じであれば
「対処法」は、Decimal 型を使うことです。
たとえば、今回の式であれば、
Dim d As Decimal = System.Math.Floor((4.975D * 100D) + 0.5D) / 100D
もしくは
Dim d As Decimal = System.Math.Floor((4.975@ * 100@) + 0.5@) / 100@
という式にすれば、4.98 という結果が得られます。
> 原因または対処方をご存じであれば
4.975 というリテラル値は、VBにとっては Double 型 として認識されます。
4.975D や 4.975@ というリテラル値は、Decimal 型 として認識されます。
我々が普段使っている小数は 10進数のものですが、Double 型は 2進小数を扱う物です。
一方、Decimal 型は 10進数を扱うためのものなので、こういう場合に都合が良いのです。
0.5 という値は、2進数では 0.1 という「割り切れる値」になるのですが、
4.975 という値は、2進数では 100.11111001100110011…という値になるため、
実際には「近似値」として格納されています(管理できる桁数は有限なので)。
これが誤差として現れるということですね。
引用返信
編集キー/
編集
■51928
/ inTopicNo.3)
Re[2]: VB.Netでの小数の値
▲
▼
■
□投稿者/ Ya
(2回)-(2010/07/26(Mon) 17:26:36)
魔界の仮面弁士様
ご回答の内容で理解し解決できました。
とても助かりました。ありがとうございます。
解決済み
引用返信
編集キー/
編集
トピック内ページ移動 / <<
0
>>
このトピックに書きこむ
過去ログには書き込み不可
管理者用
-
Child Tree
-