Ima*_*mad 0 c# math floating-point
关于SO的这么多算术问题,特别是浮点因此我将我的两个问题合并在一起.
0.3333333>双0.333333333333333?这是证明它的程序.
static void Main(string[] args)
{
int a = 1;
int b = 3;
float f = Convert.ToSingle(a) / Convert.ToSingle(b);
double db = Convert.ToDouble(a) / Convert.ToDouble(b);
Console.WriteLine(f > db);
Console.Read();
}
Run Code Online (Sandbox Code Playgroud)
float不能隐式转换decimal ,但int可以?例如
decimal d1 = 0.1f; //error
decimal d2 = 1; //no error
Run Code Online (Sandbox Code Playgroud)
对于您的第一个问题,当您在它们上使用运算符时,floats实际上会转换为doubles >.如果你打印(double)f,你会看到它的价值:
0.333333343267441
Run Code Online (Sandbox Code Playgroud)
虽然db是:
0.333333333333333
Run Code Online (Sandbox Code Playgroud)
对于第二个问题,虽然没有从隐式转换float到decimal,有一个明确的一个,所以你可以使用强制转换:
float a = 0.1f;
decimal d = (decimal)a;
Run Code Online (Sandbox Code Playgroud)
我在语言规范中找不到为什么会这样,但我推测这种转换不是你应该做的,所以你需要明确它.你为什么不这样做?因为decimal应该代表离散金额,如货币,float而且double应该代表连续金额.它们代表两种截然不同的东西.