浮点数
浮点数基础
float
double
decimal
浮点数示例
float f;
double d;
decimal m;
//①超过精度位数,数字无效
f = 1234567890f;
Console.WriteLine("f = {0}",f);//f = 1.234568E+09
//②再赋给更大精度度量,不能恢复数字
d = f;
Console.WriteLine("d = {0}",d);//d = 1234567936
//③实验double及decimal的精度
d = 987654321.123456789;
m = 12345678901234567890.123456789m;
Console.WriteLine("d = {0}",d);//d = 987654321.1234568
Console.WriteLine("m = {0}",m);//m = 12345678901234567890.123456789
//④float,double 算术计算可能会出现意外的舍入错误
double d1 = 0.1 + 0.1 + 0.1 - 0.3;
Console.WriteLine("d1 = {0}", d1);//d1 = 5.551115123125783E-17
double d2 = 0.5 + 0.5 + 0.5 - 1.5;
Console.WriteLine("d2 = {0}", d2);//d2 = 0
decimal d3 = 0.1m + 0.1m + 0.1m - 0.3m;
Console.WriteLine("d3 = {0}", d3);//d3 = 0.0
//⑤为什么不要使用 == 来判断 float double
Console.WriteLine(2.0 - 1.9 == 0.1);//False
Console.WriteLine(0.7f - 0.1f == 0.6f);//False
Console.WriteLine(0.7d - 0.1d == 0.6d);//True
//⑥如何比较两个浮点数是否相等
//double x = 0.1 + 0.1 + 0.1;
//double y = 0.3;
//两个数据相等
//double x = 2.0 - 1.9;
//double y = 0.1;
//两个数据相等
//double x = 0.7f - 0.1f - 0.6f;
//double y = 0;
两个数据相等
if (Math.Abs(x -y) < 0.000001)//精度度根据应用场景选择 10-6方常用
{
Console.WriteLine("两个数据相等");
}
else
{
Console.WriteLine("两个数据不相等");
}
浮点数注意事项
① float和double存储与计算有精度损失。
②不要使用==来比较float和double。
③精度要求高,使用decimal,但性能偏低。