- - PR -
[C#] 整数なのか浮動小数点数なのか判断したい
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-06-19 17:17
いつもお世話になっています。
表題の通り、あるDouble型の変数に入っている値が 11 12 などの整数なのか 11.15 12.25 などの小数点を含んだ値なのか判断して小数点がある数値ならそのまま、 ないなら".00"を付加して桁数を揃えたいのですが うまくいきません。何かアイデアがあればご教授ください。 | ||||||||
|
投稿日時: 2006-06-19 17:27
切り上げるか、切り捨てるかして、
値が変化しなければ、整数ですし、 変化すれば、少数ですね。 これ、ちょっと考えれば解るのでは? | ||||||||
|
投稿日時: 2006-06-19 17:29
こんにちは。
表題と本文が一致しませんが…… 「判断したい」のか「桁数をそろえたい」のか。 とりあえず桁数をそろえるなら
こんな感じで。 参照: http://msdn2.microsoft.com/ja-jp/library/kfsatb94.aspx | ||||||||
|
投稿日時: 2006-06-19 17:33
いくつか方法はあります。 文字列として見て小数点以下を見るのも良いですし、 丸めた整数とで比較しても良いですね。(これは、精度によっては危険ですが) ただ、
これが目的であるならば、"浮動小数か整数か" などという判断は不要です。 何に使用されるのかはわかりませんが... たとえば、ToString メソッドのオーバーロード一覧を見てください。 書式の設定ができるオーバーロードがあることに気付くハズです。 書式の整形という意味では、String.Format メソッドでも良いでしょう。 指定の書式の文字列に変換する _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-06-19 18:23
これは、浮動小数点を扱う際の典型的な誤りかと思います。 私は、浮動小数点を扱う時は基本的に、等号比較は行いません。 ただ、今回の話は単に表記の問題なので、ToString で解決しそうですね。 --- 参考コード Dim x As Double = 1.3 Dim sum As Double = 0 Dim i As Integer For i = 0 To 99 sum += x Next Debug.WriteLine(sum) If sum = Math.Round(sum) Then Debug.WriteLine("Equal") Else Debug.WriteLine("Not Equal") End If | ||||||||
|
投稿日時: 2006-06-19 18:31
皆さん、早速のお返事ありがとうございます。
takuさんの言われた通り、最初はこんなの簡単だろうと思って double x = 1.5; x = x - int.Parse(x); みたいな感じで、引き算してやればいいと思ってましたが 型が違うと怒られてました。(確かに違いますけど・・・ね) 上記のint.Parse(x)だと小数点以下を切り捨てるのにエラーが 出るのに、Convert.ToInt16メソッドを使ったところ何もエラーは 出ずに、値は整数に丸められてました。(少数点以下1桁で四捨五入してるみたいです。) 結局、Double型の数値をそのままToStringして文字列化したものと Convert.ToInt16をToStringして文字列化したものを単純に文字列比較して 一致しなければ小数点有りと判断する事にしました。 みなさん、貴重なご意見ありがとうございました。 | ||||||||
|
投稿日時: 2006-06-19 18:40
おそらく、taku氏がおっしゃってるのはこんな感じかと。
今回は桁数を整えたいとのことなので、文字列で処理するのが一番かとは思いますが。
[ メッセージ編集済み 編集者: burton999 編集日時 2006-06-19 18:45 ] | ||||||||
|
投稿日時: 2006-06-19 19:02
Math.Roundでもそうですが、「四捨五入」ではなく「偶数丸め」の整数が返されます。 |