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

浮点数

浮点数基础

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

数位的权值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值