7

CIntを使用して浮動小数点数を整数に変換するか、CTypeその数の値を丸めます。このInt関数Math.Floorは、浮動小数点数を整数に変換して負の無限大に丸めるために使用できますが、どちらの関数も浮動小数点値を返します。これはInteger、キャストなしで値として暗黙的に使用することはできません。

に代わる簡潔で慣用的な方法はありIntVar = CInt(Int(FloatingPointVar));ますか?パスカルが含まれRoundTrunc返された関数Integer; VB.NET言語または.NETFrameworkのいずれかに同等のものはありますか?

同様の質問ですが、CIntはDouble値を一貫して丸めません-小数部分を削除するにはどうすればよいですか?2011年に質問されましたが、浮動小数点数を整数に変換する方法があるかどうかを尋ねただけです。回答は2段階のプロセスを示唆していましたが、フレームワークに何が存在するか、何が存在しないかについては深く掘り下げていませんでした。フレームワークにPascalに類似したものがないことを信じるのは難しいと思います Trunc浮動小数点オペランドを使用してグラフィカルな演算を実行する場合、このようなことが頻繁に必要になるため、関数[このような演算は個別のピクセルとしてレンダリングする必要があり、round(x)-1 = round(x -1)+/-(2 ^ 31-1)の範囲内に収まるすべてのxに対して。このような演算が丸められている場合でも、上記の特性を確保するために、最も近い値に丸めるのではなく、Floor(x + 0.5)を使用する必要があります]

ちなみに、C#では、表記法を使用する型キャストはDoubleゼロInt(type)expr丸めるセマンティクスを使用します。これがVB.NETの動作と異なるという事実は、一方または両方の言語が、フレームワークに含まれている明示的な変換演算子ではなく、独自の変換ルーチンを使用していることを示しています。フレームワークは変換演算子を定義する必要があると思われますか?そのような演算子はフレームワーク内に存在しますか?それは何をするためのものか?C#やVB.NETから呼び出す方法はありますか?

4

4 に答える 4

4

いくつかの検索の後、VB には、拡張メソッドを記述する以外に、それを達成する明確な方法がないようです。

C#キャストは IL に(int)直接変換されます。VB にはそのような演算子はなく、代替手段を提供するフレームワーク関数もないようです。conv.i4

Usenet は 2005 年にこれについて興味深い議論を行いました。もちろん、それ以来多くの変化がありましたが、これは今でも当てはまると思います。

于 2013-02-04T18:27:37.790 に答える
1

メソッドを使用できますMath.Truncate

指定された倍精度浮動小数点数の整数部分を計算します。

例えば:

Dim a As double = 1.6666666
Dim b As Integer = Math.Truncate(a) ' b = 1
于 2013-02-04T19:30:44.247 に答える
-4

浮動小数点数の Int 部分を抽出する必要がある場合があります。

float num = 12.234;
string toint = "" + num;
string auxil = toint.Split('.');
int newnum = Int.Parse(auxil[0]);
于 2013-02-04T17:31:46.313 に答える