• 締切済み

Double→Integerへの変換で「意図しない変換を防ぐ」

'もう一質問。頻繁に考えていたこと Class himajin100000 Shared Sub Main Dim hoge As Integer Dim fuga As Double = 5.5 hoge = System.Convert.ToInt32(5.5) System.Diagnostics.Debug.Print(hoge.ToString) hoge = CType(5.5,Integer) System.Diagnostics.Debug.Print(hoge.ToString) 'という変換を防ぎたいです。 'Double値が5.0など、整数として切りの良い数字のときのみ変換したい 'それ以外はプログラマのミスとしてエラーが検出できるように。 'なお、 'hoge = DirectCast(5.5,Integer) 'とか 'hoge = DirectCast(System.Math.Floor(5.5),Integer) 'はエラーが出ます。 '今まで私は, hoge = Integer.Parse(System.Math.Floor(5.5).ToString) System.Diagnostics.Debug.Print(hoge.ToString) 'という風に書いてきました。 'Integer.Parse((5.5).ToString) System.FormatException '何かString型を介している地点で冗長な気がするので 'もっといい方法・わかりやすい方法等があれば教えてください End Sub End Class

みんなの回答

  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.2

すいません、ダメですね。 (Integerは値型なので、TryCastはダメなのを忘れてました orz) 下記のようにInteger.TryParseをやってみてください。 (これなら、文字列で"5.5"と入っていても、例外は発生しません) この辺りは、私も2008 Beta2 + .NET Framework3.5 で私も試しました。 Public Class1  Sub Main()   Dim hoge As Integer   Dim age As Double = 5.5   Integer.TryParse(age.ToString(), hoge)   Console.WriteLine(hoge)  End Sub End Class また、間違った情報を教えてしまって、お手数をお掛け致しました ことをお詫び申し上げます。

  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.1

VB.NETの2005を使っているんでしたら、TryCastが使えます。 If TryCast(System.Math.Floor(5.5),Integer) IsNot Nothing Then   hoge = DirectCast(System.Math.Floor(5.5),Integer) End If とすれば、いいだけのような気がします。 2005じゃない場合は、考えないといけないですね。 その場合は、別途補足下さい。

himajin100000
質問者

補足

回答ありがとうございます。 しかし成功しません。(VB2008 Beta2,SharpDevelop 3 Alpha) Public Class NewClass Shared Sub Main() Dim hoge As Integer If TryCast(System.Math.Floor(5.5), Integer) IsNot Nothing Then hoge = DirectCast(System.Math.Floor(5.5), Integer) End If End Sub End Class コンパイルエラー ●'TryCast' must be reference type, but 'Integer' is a value type. ●Value of type 'Double' cannot be converted to 'Integer' が出ます

関連するQ&A