刚刚查阅了MSDN,给出的解释是float的精度为7 位,所以转换会进行四舍五入。
我测试了下,没有发现有楼主描述的问题,测试代码如下:
double d = 3.1215924;
float f = (float)d;
Console.WriteLine(f.ToString());
//输出的结果是:3.121592
d = 3.1415914;
f = (float)d;
Console.WriteLine(f.ToString());
//输出的结果是:3.141591
d = 3.1515934;
f = (float)d;
Console.WriteLine(f.ToString());
//输出的结果是:3.151593
强制转换时,使用的是四舍五入。下面代码可以达到你期待的转换效果:
double x = 3.1215924;
float y = (float)(System.Math.Floor(x * 1000000) + 1) / 1000000;
也可以使用round
static void Main(string[] args)
{
double x = 3.1215914;
ShowNumber(x);
x = 3.1215924;
ShowNumber(x);
x = 3.1215934;
ShowNumber(x);
Console.ReadKey();
}
static void ShowNumber(double dbl)
{
Console.WriteLine(dbl.ToString()+"(double)>>>"+(float)System.Math.Round(dbl,8)+"(float)");
}
结果:
3.1215914(double)>>>3.121591(float)
3.1215924(double)>>>3.121592(float)
3.1215934(double)>>>3.121593(float)
测试结果和LS一样,没遇到