float.MaxValueの整数部分を取得しようとしましたが、エラーをスローしていますか?float.MaxValueをlongにキャストすると例外がスローされますか?
long l = Convert.ToInt64(float.MaxValue);
Console.WriteLine(l);
エラー: 算術演算でオーバーフローが発生しました。
float.MaxValueの整数部分を取得しようとしましたが、エラーをスローしていますか?float.MaxValueをlongにキャストすると例外がスローされますか?
long l = Convert.ToInt64(float.MaxValue);
Console.WriteLine(l);
エラー: 算術演算でオーバーフローが発生しました。
float
の最大値は3.4E + 38であり、long
の最大値は9.2E + 18です。したがって、float.MaxValue
はlong
に収まりません。あなただけfloat.MaxValue
の整数値を取得したい場合は
Convert.ToInt64
方法はOverflowException
をスローあなたはInt64.MaxValue
以上Int64.MinValue
未満の値を指定した場合、this questionに関連の回答を参照してください。しかし、浮動小数点を削除しても、float
の最大値は、long
のデータ型にはまだ適合しません。
EDIT:float
(32ビット値)long
(64ビット値)よりも高い最大値を有することを理由が原因浮動小数点数が内部のコンピュータによって表されている方法です。浮動小数点型の型は、固定小数点型および整数型よりも広い範囲の値を保持できますが、この範囲は精度を犠牲にして実現されます。
Notice also that there is no implicit conversion from floating-point types to long.
float
はlong
(8バイト)よりも小さく(4バイト)の構造であるが、それは広い範囲を持っている、です。 (EDIT:。。「なぜ」に対応して、あなたがWhat Every Computer Scientist Should Know About Floating-Point Arithmeticを読みたいかもしれませんほとんどの積分タイプとは異なり、その範囲が等しくない2 ^ビットを行います)
float.MaxValue ~= 3.402823+e38
long.MaxValue ~= 9.223372+e18
明らかに、float.MaxValue
の不可欠な部分は、」することができますtはlong
と表されます。 (このような大きな単精度浮動小数点数を持つこのような精度を求めることは、通常は全く意味がないという事実を気にしないでください)。
さて、あなたは本当に整数型でこれを表現したい場合は、(appropriate constructorで)ここにSystem.Numerics.BigInteger
を使用して試みることができるが、それ以上の情報がないと私はあなたがこのような大規模なと整数演算のための本当必要性を持って真剣に疑うだろう数字。
あなたが必要とするすべての表示にある場合は、固定小数点表記の数値は、適切なformat-specifierを使用することができます。
//output: "340282300000000000000000000000000000000"
Console.WriteLine(float.MaxValue.ToString("F0"));
あなたはInt64型のTryParseメソッドを使用することができます。それが失敗した場合は、単に使用してフロートの不可欠な部分を取る:
Int64.Parse(s.Substring(s.IndexOf()+ 1) "");
は、.NET 4には数の大きさを扱うことができる新しいBigIntegerタイプがあります。
float.MaxValueの整数部分をint32またはint64のいずれかにしたいだけです。 – Lalit
ありがとう、ちょうど浮動小数点がint32より大きくなる可能性があることに興味があり、どちらも32ビットを使用します。 float:32ビットwhile int32:32bit – Lalit
私の編集した答えを見てください。 –