C#_详解浮点数类型特征

浮点数

浮点数基础

C#_详解浮点数类型特征_第1张图片

float

C#_详解浮点数类型特征_第2张图片

 double

C#_详解浮点数类型特征_第3张图片

decimal

C#_详解浮点数类型特征_第4张图片

浮点数示例 

C#_详解浮点数类型特征_第5张图片

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,但性能偏低。

数位的权值

C#_详解浮点数类型特征_第6张图片

你可能感兴趣的:(C#秘籍,c#,开发语言)