- - PR -
Float→Doubleの型変換について(C#)
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-12-04 20:53
お世話になっています。
Float→Doubleの型変換を行った時、ゴミが付加されてしまい 困っています。 ゴミが付加されないような変換は可能なのでしょうか? ご存じの方がいましたら、対策を教えてください。 <サンプル> float ansF = 1234.5F double ansD ; ansD = ansF ; ansDで、「1234.5」と取得したい →現状は、「1234.5000244140625」となる <試行1.キャストする> float ansF = 1234.5F double ansD ; ansD = (double)ansF ; →状況は変わらず <試行2.Convertする> float ansF = 1234.5F double ansD ; ansD = Convert.ToDouble(ansF) ; →状況は変わらず 他に、どのような方法があるか分からない状態です。 よろしくお願いします。 以上 | ||||||||
|
投稿日時: 2006-12-05 08:56
ならなかったです。 環境が違うからかな? Microsoft Visual C#2005 ですが。 _________________ R・田中一郎 - R.Tanaka.Ichiro’s Blog | ||||||||
|
投稿日時: 2006-12-05 10:24
結果: 1234.500000000000000 1234.500000000000000 .NET Framework1.1ですが、ならないですね。 「ふたつの変数に値を設定して表示するだけ」の単純なプログラムでも同じようになりますか? 何か他の事をしているせいじゃないですか? あと環境を教えてください。 | ||||||||
|
投稿日時: 2006-12-05 11:04
こんにちは。
float ansF = 1234.5F ではなく、違う数値なんでしょうね。 たとえば、
では、ansDは「1234.300048828125」になります。 C#(.NET Framework1.1)、VC++.NET2003とも。 float型の有効桁数は約7桁なので、 それ以降の桁は無視すればいいのです。 浮動小数点数型と誤差 無視できないのであればDecimal型を使いましょう。 | ||||||||
|
投稿日時: 2006-12-05 11:09
浮動小数点数だし。。。
きれいに割り切れる値でも無い限り計算するときに誤差は出るでしょう。 でも 1234.5F だったらきれいに割り切れると思うんですけれどね。。。 _________________ かるあ のメモ と スニペット | ||||||||
|
投稿日時: 2006-12-05 11:14
double 型で使用したいのであれば、このようになります。
しかし、最初から double 型で扱えば良いと思ったりもするわけですが。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-12-05 11:43
すみません、これってどういう意味ですか? [ メッセージ編集済み 編集者: なちゃ 編集日時 2006-12-05 11:44 ] | ||||||||
|
投稿日時: 2006-12-05 12:14
ただ単に 「無視」 するだとまずいかもしれません。 1234.6 の時とか、結果が変わってしまうような... ("無視" の意味合いが違うかもしれませんが)
浮動小数の誤差には疎い年代ですから、そう言われると不安になるのですが、 最終的に double 型に格納したいのであれば、という意味です。 確認せず書いているので、何か間違いがあるかもしれません。 なちゃさんからの突っ込みは勉強になりますから、何かありましたらご指摘ください。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
1|2|3
次のページへ»