Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c中的浮点和双精度#_C# - Fatal编程技术网

C# c中的浮点和双精度#

C# c中的浮点和双精度#,c#,C#,启动浮点型变量时是否需要指定f float a =3455.67f; 如果我宣布并发起 float a = 3455.67; 那么会发生什么呢?在float上显示: 默认情况下,赋值右侧的实数文本 运算符被视为双精度。因此,要初始化浮点 变量,使用后缀f或f 这意味着如果你做float a=3455.67则编译器将拒绝将双精度隐式转换为浮点默认情况下,赋值运算符右侧的实数文本被视为双精度。因此,要初始化浮点变量,请使用后缀f或f,如下例所示: float x = 3.5F; 如果在前面的声

启动浮点型变量时是否需要指定
f

float a =3455.67f;
如果我宣布并发起

float a = 3455.67;
那么会发生什么呢?

float
上显示:


默认情况下,赋值右侧的实数文本 运算符被视为双精度。因此,要初始化
浮点
变量,使用后缀
f
f


这意味着如果你做
float a=3455.67
则编译器将拒绝将
双精度
隐式转换为
浮点

默认情况下,赋值运算符右侧的实数文本被视为双精度。因此,要初始化浮点变量,请使用后缀f或f,如下例所示:

float x = 3.5F;
如果在前面的声明中不使用后缀,则会出现编译错误,因为您试图将双精度值存储到浮点变量中

float a =3455.67f;
有关更多详细信息,请参见以下内容:

float a = 3455.67;
不会编译。3455.67是一个双常量,C#允许您将该值分配给浮点变量

float a =3455.67f;
使用:


或者您必须指定“f”格式后缀。

@samm yes否则编译器会给出错误“double类型的文本不能隐式转换为'float'类型;使用'f'后缀创建此类型的文本”。问题应该重新编写为“为什么f是必需的”,而不是“会发生什么”-1:从MSDN复制/粘贴(无需进一步ado)并不是一个好办法。是的,我知道,但最好在这里提供一些信息,在一段时间后,只能打开指向MSDN链接的URL链接。我总是想知道为什么这是一个强制语法。显然,在编译器级别真正发生的事情是,首先将equal操作的右侧指定为double,然后再将其指定给left had类型。这听起来很奇怪,因为F使得显式的左“float”类型更有趣,这是必需的,因为double不会隐式地强制转换为float(或者有趣的是,任何其他类型)。看看为什么浮动到双精度转换被认为是加宽,而双精度到浮动则不是?从逻辑上讲,反过来应该是正确的,因为例如,(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.1000000149011612和(double)+INF[意味着大于1.79E308的值],两者都是错误的。从更具体的类到不太具体的类型转换正在扩大,而反向转换正在缩小。为什么浮动是向后的?