float问题

5 篇文章 0 订阅

早就听说 float和double内存管理的原因不能直接比较大小。今天,借助unity平台,来看一下  c#中float的比较问题。

1.常数比较和未计算的变量比较

using UnityEngine;
using System.Collections;

public class Main : MonoBehaviour {

	float testNum = 1f;
	float resultNum = 1f;
	// Use this for initialization
	void Start () {
		Debug.Log(1f == 1f);
		Debug.Log(testNum == resultNum);
		Debug.Log(testNum == 1f);
		Debug.Log(testNum.Equals(resultNum));
		Debug.Log(testNum.Equals(1f));
	}
	
	// Update is called once per frame
	void Update () {
	
	}
}

结果返回5个true


2.比较运算之后的结果

<pre name="code" class="csharp">using UnityEngine;
using System.Collections;

public class Main : MonoBehaviour {

	float testNum = 1f;
	float resultNum = 1f;
	// Use this for initialization
	void Start () {
		float sum = 0f;
		for(int i = 0; i < 10; i++)
		{
			sum += 0.1f;
		}
		Debug.Log(sum+"   "+(sum == testNum));
		Debug.Log(sum+"   "+(sum.Equals(testNum)));
		Debug.Log(sum+"   "+(sum == 1f));
		Debug.Log(sum+"   "+(sum.Equals(1f)));
	}
	
	// Update is called once per frame
	void Update () {
	
	}
}


 运行之后 发现虽然 sum==1 但是sum!= testNum 

所以,float变量的比较(尤其是某一变量经过了计算),要用

Mathf.Abs(testNum - resultNum) < 0.001
当然 0.001是精度,可以根据自己的需求设置


3.float强制转化

using UnityEngine;
using System.Collections;

public class Main : MonoBehaviour {

	float testNum = 2f;
	// Use this for initialization
	void Start () {
		Debug.Log(1 / 2);
		Debug.Log(1 / testNum);
		Debug.Log(1f / testNum);
		Debug.Log(1f / 2);
	}
	
	// Update is called once per frame
	void Update () {
	
	}
}

除第一个外,均为0.5,说明二者只要有一个是float即可。


4.除以0

在unity中可以除以0 大家可以试一下  Debug.Log(1/0);  结果我就不说了。。。。。。哈哈


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值