回答
的documentation上float
說:
默認情況下,一個真正的數字文字的賦值操作符 被視爲
double
的右側。因此,要初始化一個變量,請使用後綴f
或F
。
這意味着,如果你做float a = 3455.67;
那麼編譯器將拒絕隱含的double
轉換爲float
。
我總是想知道爲什麼這是一個強制性的語法。顯然,在編譯器級別真正發生的事情是,在將相等操作的右側分配給左側類型之前,首先將其指定爲雙側。這聽起來很奇怪,因爲F使明確的左「浮動」鍵入條件 – 2012-02-17 11:34:57
更有趣的文檔,這是必需的,因爲double不隱式地轉換爲浮動(或有趣的是,其他任何東西)。請參閱http://msdn.microsoft.com/en-us/library/y5b434w4.aspx – BradleyDotNET 2014-05-30 19:13:49
此:
float a = 3455.67;
將無法編譯。 3455.67是一個雙常量,C#將允許您將該值賦給一個浮點型變量。
用途:
float f = (float)3455.67;
否則你就必須指定 「F」 格式後綴。
爲什麼浮動雙重轉換考慮擴大,而雙浮動不是?邏輯上,反過來應該是真實的,例如, (float)((double)0.1)和(float)((double)1E38 * 10.0)將產生(float)0.1和(float)+ INF [意味着大於3。4E38],兩者都是正確的。相反,(double)(0.1f)或(double)((float)1E38f * 10.0f)會產生(double)0.10000000149011612和(double)+ INF [意味着大於1.79E308的東西],這兩者都是錯誤的。從較具體的類別轉換爲較不具體的類別正在擴大,而反轉類型正在縮小。爲什麼漂浮在後面? – supercat 2012-03-20 17:45:29
- 1. C#float和double錯誤
- 2. float和double輸出
- 3. Double和Float大小
- 4. 比較float和double
- 5. c#BitConverter.GetBytes(float/double)格式?
- 6. C-structs,NSObjects,float,int,double,
- 7. 位數float和double變量
- 8. Double和Float共存實現
- 9. double和float值比較
- 10. Float和Double爲貨幣值
- 11. float or double precision
- 12. Double vs Float - Java
- 13. 在LLVM IR中區分float和double
- 14. printf和co如何區分float和double
- 15. double和float數據類型的行爲
- 16. 提取float/double值
- 17. Java raytracing float vs double
- 18. Java - int/long,float/double
- 19. C++如何將int整型爲float/double?
- 20. Float,Double,Char,C++錯誤。哪裏不對?
- 21. C:奇怪的錯誤使用float和double
- 22. 從double到float的截斷?
- 23. C++中double和DOUBLE的區別
- 24. float 0.5和double 0.5如何相等
- 25. 比較float和double並打印它們
- 26. 比較float和double值與delta嗎?
- 27. .NET double和python float有什麼區別?
- 28. float和double在不同平臺上
- 29. x86和x86_64中的float和double之間的性能差異
- 30. 將C#中的double轉換爲float值給出錯誤的值
你試過了嗎? – samn 2012-02-17 11:09:54
@samm是否則編譯器給出錯誤「字面值double不能隱式轉換爲類型'float';使用'F'後綴來創建此類型的字面值」。 – Eljay 2012-02-17 11:11:45
這個問題應該被重寫爲「爲什麼是強制性的」而不是「會發生什麼」 – 2012-02-17 11:21:34