为什么可以';t I为C#中的浮点变量赋值1.2?我在C和C+中也做了同样的事情+;,它成功了
为什么我不能给C#中的浮点变量赋值1.2?我在C和C++中也做了同样的工作,为什么可以';t I为C#中的浮点变量赋值1.2?我在C和C+中也做了同样的事情+;,它成功了,c#,casting,floating-point,double,C#,Casting,Floating Point,Double,为什么我不能给C#中的浮点变量赋值1.2?我在C和C++中也做了同样的工作, class Program { private readonly int a = 20; private readonly float b; public Program(float tmp) { b = tmp; } static void Main(string[] args) { Program obj1 = n
class Program
{
private readonly int a = 20;
private readonly float b;
public Program(float tmp)
{
b = tmp;
}
static void Main(string[] args)
{
Program obj1 = new Program(1.2);
Console.Read();
}
}
它给出的误差不能转化为双浮。
为什么1.2浮点值不是这样呢?
1.2
是双精度的(8字节)。1.2f
是一个float
(4字节)
除非您通过添加
f
将其标记为float
,否则代码中包含小数点的任何文字数字都将被解释为双精度
,而不是浮点
double不会自动转换为float,因为这会导致精度损失
要修复代码,您可以:
- 将文字数字标记为浮点数:
Program obj1=新程序(1.2f)代码>
- 或者,将其显式转换为浮点:
Program obj1=新程序((浮点)1.2)代码>
使用数字文字时,应首选前一个选项,但如果要传递类型为double的变量,则可以使用后一个。精度损失并不比典型的
浮点操作(例如计算1.0f/10.0f)更严重。问题很简单,就是.net遵循Java的向后规则,这要求显式转换从更具体的类型转换为不太具体的类型(尽管每个double
值都可以在float
中表示,即使仅表示为一个值,例如“超过2^128”),但是,不需要从特定的类型到更具体的类型(尽管编译器必须任意猜测额外的比特应该是零)。在C和C++中,1.2也是双的。它将被截断为浮动。也许会有一个警告