共用方式為


從浮點數類型的轉換

如果原始值在結果類型中完全可表示,則轉換成另一個浮點型別的浮點值不會變更值。 如果原始值是數值,但無法確切表示,則結果為下一個大於或下一個較低的可表示值。 如需浮點類型的範圍,請參閱 浮點常數 的限制。

轉換成整數類型的浮點值會先捨棄任何小數點值來截斷。 如果這個截斷的值在結果類型中是可表示的,結果必須是該值。 無法表示時,結果值是未定義的。

Microsoft 特定的

Microsoft編譯程式會針對 float 值使用 IEEE-754 binary32 表示法,以及 和 doublelong double binary64 表示法。 由於 long double 並使用 double 相同的表示法,所以它們具有相同的範圍和精確度。

當編譯程式將 或 long double 浮點數float轉換成 double 時,它會根據浮點環境控件來四捨五入結果,該控件預設為「四捨五入至最接近,系結至偶數」。如果數值太高或太低而無法表示為數值float,則轉換結果會根據原始值的正數或負無限大,如果啟用,則會引發溢位例外狀況。

轉換成小於 long 整數型別的結果是將值 long轉換成 的結果,然後轉換成結果型別。

若要轉換為整數類型,至少與一樣大 long,轉換結果類型中值太高或太低,可能會傳回下列任何值:

  • 結果可能是 sentinel 值,這是最遠於零的可表示值。 對於帶正負號的類型,這是可表示值的最低值(0x800...0). 對於不帶正負號的類型,它是最高可表示的值(0xFF...F).

  • 結果可能會 飽和,其中值太高而無法表示的值會轉換成最高的可表示值。 值太低而無法表示,會轉換成最低的可表示值。 這兩個值的其中一個也會當做 sentinel 值使用。

  • 若要轉換成 unsigned longunsigned long long,轉換超出範圍值的結果可能是一些值,而不是最高或最低可表示的值。 結果是否為 sentinel 或飽和值,取決於編譯程式選項和目標架構。 未來的編譯程式版本可能會改為傳回飽和或 sentinel 值。

END Microsoft 特定的

下表摘要說明從浮點類型進行轉換。

浮點類型的轉換數據表

方法
float char long轉換為 ,然後轉換成longchar
float short long轉換為 ,然後轉換成longshort
float int 於小數點截斷。 如果 result 太大而無法表示為 int,則 result 未定義。
float long 於小數點截斷。 如果 result 太大而無法表示為 long,則 result 未定義。
float long long 於小數點截斷。 如果 result 太大而無法表示為 long long,則 result 未定義。
float unsigned char long轉換為 ,然後轉換成longunsigned char
float unsigned short long轉換為 ,然後轉換成longunsigned short
float unsigned 於小數點截斷。 如果 result 太大而無法表示為 unsigned,則 result 未定義。
float unsigned long 於小數點截斷。 如果 result 太大而無法表示為 unsigned long,則 result 未定義。
float unsigned long long 於小數點截斷。 如果 result 太大而無法表示為 unsigned long long,則 result 未定義。
float double 表示為 double
float long double 表示為 long double。 在 MSVC 中, long doubledouble 具有相同的表示法。
double char float轉換為 ,然後轉換成floatchar
double short float轉換為 ,然後轉換成floatshort
double int 於小數點截斷。 如果 result 太大而無法表示為 int,則 result 未定義。
double long 於小數點截斷。 如果 result 太大而無法表示為 long,則 result 未定義。
double unsigned char long轉換為 ,然後轉換成longunsigned char
double unsigned short long轉換為 ,然後轉換成longunsigned short
double unsigned 於小數點截斷。 如果 result 太大而無法表示為 unsigned,則 result 未定義。
double unsigned long 於小數點截斷。 如果 result 太大而無法表示為 unsigned long,則 result 未定義。
double unsigned long long 於小數點截斷。 如果 result 太大而無法表示為 unsigned long long,則 result 未定義。
double float 表示為 floatdouble如果值不能完全表示為 float,就會遺失精確度。
double long double long doubledouble視為 。

long double 轉換會遵循與 從 double轉換相同的方法。

另請參閱

指派轉換