左側の整数値を10進数または2進数から取得する必要があります。例:4.6から値4を取得する必要があります。 Math.Floor関数を使用してみましたが、たとえば、4.6から4.0を返しているなど、double値を返しています。 MSDNドキュメントには、整数値が返されると書かれています。ここに何かが足りませんか?または、私が探しているものを達成する別の方法がありますか?
double
の範囲は、int
またはlong
の範囲よりもはるかに広いです。次のコードを検討してください。
double d = 100000000000000000000d;
long x = Math.Floor(d); // Invalid in reality
整数はlong
の範囲外です-それで何が起こると思いますか?
通常、値は実際がint
またはlong
の範囲内であることを知っているので、キャストします。
double d = 1000.1234d;
int x = (int) Math.Floor(d);
しかし、そのキャストの責任は開発者にあり、Math.Floor
自体にはありません。 long
の範囲外のすべての値に対して例外を発生させて失敗させることは、不必要に制限されていたでしょう。
MSDNによると、Math.Floor(double)はdoubleを返します。 http://msdn.Microsoft.com/en-us/library/e0b5f0xb.aspx
あなたがintとしてそれをしたい場合:
int result = (int)Math.Floor(yourVariable);
MSDNの記事がどのように誤解を招く可能性があるかを見ることができますが、結果は「整数」(この場合は整数を意味します)でありながらTYPE Double
数値の整数部分だけが必要な場合は、数値をint
にキャストします。これにより、小数点で数値が切り捨てられます。
double myDouble = 4.6;
int myInteger = (int)myDouble;
Convert.ToInt32(Math.Floor(Convert.ToDouble(value)))
これにより、4.6
を取得した場合に希望する正確な値が得られ、出力として4
が返されます。
それは正しいです。宣言を見ると、Math.Floor(double)はdoubleを生成します( http://msdn.Microsoft.com/en-us/library/e0b5f0xb.aspx を参照)。 「整数」とは「整数」を意味すると思います。
Floorはそれをdoubleのままにしておくので、さらに二重計算を行うことができます。 intとして必要な場合は、floorの結果をintとしてキャストします。元のdoubleをintとしてキャストしないでください。負数の場合、floorのルールが異なります(IIRC)。