10進数またはdoubleから左側の整数値を取得する必要があります。例:4.6から値4を取得する必要があります。Math.Floor関数を使用してみましたが、例としてdouble値が返されます。4.6から4.0が返されます。MSDNドキュメントは、整数値を返すと言います。ここで何か不足していますか?または私が探しているものを達成する別の方法はありますか?
10進数またはdoubleから左側の整数値を取得する必要があります。例:4.6から値4を取得する必要があります。Math.Floor関数を使用してみましたが、例としてdouble値が返されます。4.6から4.0が返されます。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はダブルを返します。http://msdn.microsoft.com/en-us/library/e0b5f0xb.aspx
あなたがそれをintとして望むなら:
int result = (int)Math.Floor(yourVariable);
私は、MSDNの記事が誤解を招く可能性があることを確認できますが、結果は「整数」(この場合は整数)であるが、それでもTYPE Doubleであると彼らは指定しているはずです
int
名前)と(タイプの名前)の違いを強調したかっただけです。
それは正しいです。宣言を見ると、Math.Floor(double)はdoubleを生成します(http://msdn.microsoft.com/en-us/library/e0b5f0xb.aspxを参照)。「整数」は「整数」を意味すると思います。
Convert.ToInt32(Math.Floor(Convert.ToDouble(value)))
これにより、出力として4.6
返す場合に必要な正確な値が得4
られます。