2016-11-07 5 views
2

Option StrictはVBアプリケーションでオフでしたので、私はこれをオンにしました。私はどうなるのC#でDoubleを整数に変換する最良の方法は何ですか

pnlWait.Top = (Height - pnlWait.Height)/2 

pnlWait.Top = (int)(Height - pnlWait.Height)/2; 

しかし、これはVBでは動作しません。私は今、私が解決する方法について不明な点が午前多少の誤差があります。私はDecimal.ToInt32を試しましたが、除算でDoubleを作成していて、Double.ToInt32が存在しないために文句を言うのです。 Interger.ParseにはStringが必要なので、これは何も良いことではありません。私は、彼らが効率的かもしれないと思うので、私はCTypeDirectCastがいいかもしれないと思うが、これらの方法は、多くのオブジェクト上で動作します

pnlWait.Top = Integer.Parse(((Height - pnlWait.Height)/2).ToString) 'Yeah, right! 

+1

私はいつもConvert.ToInt32([double]) – soohoonigan

+5

を使って整数除算を使用します: 'pnlWait.Top =(Height - pnlWait.Height)\ 2' – Plutonix

+1

参考資料[タイプ変換関数(Visual Basic)](https://msdn.microsoft.com/en-us/library/s2dy91zy.aspx?f=255&MSPPError=-2147217396)は、言語で実装された変換演算子を使用し、コンパイラに変換を選択させることを推奨しています方法。私は、最良の変換方法を構成するものについていくらか矛盾しています。いくつかのメソッドは、あなたが知っていなければならない丸めと、パフォーマンスに影響を与えるコールチェーンに従うものがあります。私はあなたが使用するツールを知ることをお勧めします。すなわちRTFM。 :) – TnTinMn

答えて

0
pnlWait.Top = Convert.ToInt32((Me.Height - pnlWait.Height)/2) 
1

リンクtinmanを投稿した後、私はVB.Net固有の変換機能を使用することをお勧めします。私は当初、彼らがVBからホールドオーバーだったと思っているのを避けましたが、そうではないようです。インラインでコンパイルされていると言われたときに売られたので、私はCIntなどを使用します。

私の例以外は、Plutonixの提案を使用します。私はそれを完全に忘れてしまった。

ので、一般的に、私は

pnlWait.Top = (Height - pnlWait.Height) \ 2 
除き

If CBool(DR.Item(Mailings.WelcomePacket.SelectToMail)) Then 

pnlWait.Top = CInt((Height - pnlWait.Height)/2) 

そして

If DR.Item(Mailings.WelcomePacket.SelectToMail) Then 

になります使用します。

ははるかにクリーンです。

+0

私は整数部で最後のバージョンを使用します。 '(int)'は0に向かって丸めますが、 'CInt'は偶数に向かって丸めます。http://stackoverflow.com/questions/4181942/convert-double-to-int/4181954#comment68670590_4181954' 3 \ 2'は1ですが、ブール値への変換が失敗した場合(例えば 'DBNull.Value')、' CBool​​(object) 'は例外を起こすので、' object.Equals(True) 'や' True.Equals (オブジェクト) ' – Slai

関連する問題