回答
的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. float和double输出
- 2. C-structs,NSObjects,float,int,double,
- 3. c#BitConverter.GetBytes(float/double)格式?
- 4. double和float值比较
- 5. Float和Double为货币值
- 6. Double vs Float - Java
- 7. 提取float/double值
- 8. Java - int/long,float/double
- 9. Float,Double,Char,C++错误。哪里不对?
- 10. C++如何将int整型为float/double?
- 11. 从double到float的截断?
- 12. C++中double和DOUBLE的区别
- 13. 比较float和double并打印它们
- 14. float 0.5和double 0.5如何相等
- 15. 比较float和double值与delta吗?
- 16. .NET double和python float有什么区别?
- 17. x86和x86_64中的float和double之间的性能差异
- 18. Flex中的double或float数据类型?
- 19. atof()for float而不是double
- 20. 将double转换为float?
- 21. float或double特殊值
- 22. ef4 poco double/float dbtype mapping
- 23. 将double [] []转换为float [] []
- 24. 格式float/double与角
- 25. Float array double array and back,
- 26. mysql将float转换为double
- 27. Java中float和double的包含范围是什么?
- 28. double/float的jQuery输入验证
- 29. 指定的强制转换无效 - SQL float to C#double
- 30. 在这个输入中float和double有什么区别?
你试过了吗? – samn 2012-02-17 11:09:54
@samm是否则编译器给出错误“字面值double不能隐式转换为类型'float';使用'F'后缀来创建此类型的字面值”。 – Eljay 2012-02-17 11:11:45
这个问题应该被重写为“为什么是强制性的”而不是“会发生什么” – 2012-02-17 11:21:34