在C#中我们做一些数学计算时,常会见到Math和Mathf的使用。到底使用哪个,它们有什么区别?
首先了解下它们的定义:
Math:是C#中封装好的用于数学计算的一个工具类,命名空间是System;
Mathf:是Unity中封装好的用于数学计算的一个工具结构体,命名空间是UnityEngine。
事实上,Mathf是Unity基于Math专门封装的一个机构提,它包含了Math中的所有方法,又增加了一些适合Unity自身游戏开发的一些方法。
主要了解下Math的一些常用方法:
一、小数取整有向上取整和向下取整:
1、向上取整方法:Math.Ceiling()
例:Math.Ceiling(1)=1
Math.Ceiling(1.3)=2
Math.Ceiling(1.5)=2
2、向下取整方法:Math.Floor()
例:Math.Floor(1)=1
Math.Floor(1.3)=1
Math.Floor(1.5)=1
二、四舍五入
四舍五入使用的方法是:Math.Round()
Round(Decimal)
Round(Double)
Round(Decimal, Int32)
Round(Decimal, MidpointRounding)
Round(Double, Int32)
Round(Double, MidpointRounding)
Round(Decimal, Int32, MidpointRounding)
Round(Double, Int32, MidpointRounding)Math.Round()具有多重方法,常规使用的方法它实际上四舍六入五取偶,即当碰到.5时,前面是偶数就取前面偶数。
例:
Math.Round(0.5)=0
Math.Round(1.5)=2
Math.Round(2.5)=2
Math.Round(3.5)=4
想要实现中国式的四舍五入:
就需要使用后面的方法Round(Decimal, MidpointRounding)的MidpointRounding.AwayFromZero模式:
当小数四舍五入取整时,该方法可正常实现:如:Math.Round(0.5,MidpointRounding.AwayFromZero)=1
但是如果要计算小数,就需要使用Math.Round(Decimal, Int32, MidpointRounding)重载方法。
例:
Math.Round(16.216, 2)=16.22
Math.Round(16.216, 2, MidpointRounding.AwayFromZero)=16.22
Math.Round((decimal)16.216, 2)=16.22
Math.Round((decimal)16.216, 2, MidpointRounding.AwayFromZero)=16.23
三:Math常用属性
Math.E≈2.718(欧拉数);Math.PI≈3.14
四:返回绝对值:Abs(x)
Unity中Mathf的一些常用方法:
1、钳制方法:Mathf.Clamp(),第一个数和后面两数比较,比最小一个还小返回后面最小值,比最大还大返回后面最大数,否则返回本身。
2、Mathf.Clamp01(),钳制值在0-1之间。
3、插值Mathf.Lerp()
Mathf.Learp(from : float, to :float, t : float) : float
基于浮点数t返回a到b之间的插值,t限制在0~1之间。
当t = 0返回from,当t = 1 返回to。当t = 0.5 返回from和to的平均值。
相当于值等于to*t
例:Mathf.Learp(0,100,0.0)=0
Mathf.Learp(0,100,0.1)=10
Mathf.Learp(0,100,0.5)=50
Mathf.Learp(0,100,1)=100
本文介绍了C#中的Math类和Unity中的Mathf结构体,用于数学计算。Mathf是Unity对Math的扩展,包含更多游戏开发相关方法。Math提供了向上取整(Math.Ceiling)、向下取整(Math.Floor)和四舍五入(Math.Round)功能。Unity的Mathf包括钳制方法 Mathf.Clamp、Mathf.Clamp01 和插值方法 Mathf.Lerp。
8614

被折叠的 条评论
为什么被折叠?



