2

私は番号を持っています:94,800,620,800

Floatは4バイトのデータ型です。Int32も4バイトのデータ型です。

float f = 94800620800; // ok
Int32 t = 94800620800; // error

この問題を説明してください。Int32を使用するとエラーが発生するのはなぜですか。どちらも4バイトのデータ型であるため、この数値をfloatデータ型に使用できるのはなぜですか。ありがとう。

4

9 に答える 9

5

割り当てようとしている数値は、タイプの数値で可能な最大値Int32( 2,147,483,647)よりも大きいためです。注意すべき点として、aの最大値Single3.402823×1038です

于 2011-09-09T09:11:12.817 に答える
5

Int32の最大値は2,147,483,647で、94,800,620,800未満です。

フロートは、次の範囲の値を取ることができます:±1.5×10-45〜±3.4×1038

また、このSOの質問を確認してください-Javaでサイズが同じ場合のfloatデータ型と整数データ型の違いは何ですか?。これはJavaの質問ですが、概念は同じであり、同じサイズであっても違いの詳細な説明があります。

于 2011-09-09T09:12:11.667 に答える
3

その数は4バイト整数には大きすぎるためです。のようなスカラー値にInt32は最小制限と最大制限(この場合はそれぞれ-231231-1)があり、この範囲外の値を格納することはできません。

浮動小数点数はまったく異なる方法で格納されるため、大きな値でコンパイラエラーが発生することはなく、後で実行時に精度の問題が発生する可能性があります。

于 2011-09-09T09:11:54.767 に答える
3

これらのタイプのため、内部表現。

floati、d ^ nのようなものを使用します。ここで、iは整数部分、dは小数部分、nは指数です(もちろん、これは基数2で発生します)。

このようにして、より大きな数をに格納できますが、たとえば、整数を格納するfloat場合のように正確ではありません。Int32変換しようとすると

float f = 94800620800; 

その値を格納するのに十分な大きさの積分型の場合、最初の94800620800と同じではない可能性があります。

于 2011-09-09T09:14:31.117 に答える
1

たぶんあなたはエラーメッセージを読むべきですか?;)

Error   Integral constant is too large

32ビット整数の最大値は2,147,483,647です。

一方、フロートは、単一の数値ではなく仮数と指数を格納するため機能するため、精度を失う可能性を犠牲にして、はるかに広い範囲に対処できます。

フロートを印刷してみてください。下のビットが失われるので、94800620000代わりに取得します。94800620800

于 2011-09-09T09:12:22.573 に答える
1

整数型は正確な表現ですが、浮動小数点数は有効数字と指数の組み合わせです。

浮動小数点wikiページは、これがどのように機能するかを説明しています。

于 2011-09-09T09:16:13.400 に答える
0

Int32の最大値は2,147,483,647です。あなたの価値ははるかに高いです。

system.int32.maxvalueを見てください

于 2011-09-09T09:12:10.390 に答える
0

提供された定数式の値がintデータ型の範囲内にありません。

于 2011-09-09T09:12:32.153 に答える
0

Int32の範囲は-2,147,483,648から2,147,483,647になります。変数が範囲外です。

于 2011-09-09T09:14:26.973 に答える