精度不够,我这个代码在VBA下可以得到0.5
Dim pi As Double
pi = 3.14159265358979
MsgBox Sin(pi / 6)
实际上编程的时候,碰到有小数的场合,都应该考虑精度问题,一般不能用
if a = b then
这样的方法来判断是否相等。应该设置一个许可误差,判断一个值是否在许可误差内,或者不需要精确值时,用
if a<= b 或 if a>=b
这样的方式来判断。
这是硬件决定的,因为小数的长度可能是无限的,电脑不可能储存无限的数,所以总是会舍弃小数。如果要求高,就用double类型,否则用single类型,保证精度。楼主这个问题可以计算出0.5,只能说是幸运,最好还是要假设他就是0.5左右。或者考虑用四舍五入,比如保留两位小数,那绝对能得到0.5了。
这是由浮点数运算误差造成的,跟VB无关,在任何编程语言、任何电脑中都会出现这样的误差的,因为电脑只能用固定的位数来表示浮点数,比如双精度浮点数是64位,单精度浮点数是32位,具体到10进制数,则双精度浮点数只能精确到15个有效数字,单精度浮点数只能精确到7个有效数字,也就是说,象圆周率这样的无限小数在VB中最多只能设为3.14159265358979,这样的话计算结果肯定有误差的。这是无法避免的,只能通过一些曲线救国的办法来补救,比如尽可能转为整数运算(因为整数运算肯定是精确的)、通过取整获得最接近的数值(比如0.499999234如果保留两位小数那么就是0.50了,因为实际应用中并不需要很精确的数字的)、尽量使用高精度的浮点类型,等等。
三角函数本来就是近似于0.5 而非精确的等于0.5
π/6换算成角度就是30度,其Sin值正好是0.5。