LUA,C#中float型和double型的隐式舍入操作



在学习LUA的过程中,发现了如下现象:

根据《魔兽世界脚本编程宝典的描述》对这一情况的描述,可以确定该状况的发生应该和浮点数本身采用的IEEE编码格式有关系;

那么这一现象应该也存在于其他语言。针对这一情况,在C#中进行了测试。

            float x = 1.2f;
            float y = 1.0f;
            Console.WriteLine((x - y) > 0.2f);
            Console.WriteLine(1.2f-1.0f);

            double a = 1.2d;
            double b = 1.0d;
            Console.WriteLine((a - b) > 0.2d);

            Console.WriteLine(0.2f > 0.2f);

结果却完全相反

 

由此可见,在发生计算时,两种语言在使用float形进行计算时都发生了隐式的转换。

这应该是由浮点数的特殊存储方式决定的,和两种语言的float型的编码机制有关,由于浮点数内部使用二进制保存的,因此和十进制转换有误差。

在实际应用中,存储空间宽裕的情况下最好统一使用double类型,即便使用float类型也要配对使用,避免在传值和比较时出现隐藏bug。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值