重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这应该是由浮点数的误差所造成的,你把kk设为双精度浮点数,那么结果就是1.34
绥中网站建设公司创新互联公司,绥中网站设计制作,有大型网站制作公司丰富经验。已为绥中上千家提供企业网站建设服务。企业网站搭建\外贸营销网站建设要多少钱,请找那个售后服务好的绥中做网站的公司定做!
但是浮点数误差与精度是无关的,双精度也同样存在,继续测试你就会发现有趣的现象:
下面假定s为单精度浮点数变量,d为双精度浮点数变量,则:
s = 1.345 Round(s, 2) = 1.35 (错)
d = 1.345 Round(d, 2) = 1.34 (对)
s = 2.345 Round(s, 2) = 2.35 (错)
d = 2.345 Round(d, 2) = 2.35 (错)
s = 3.345 Round(s, 2) = 3.35 (错)
d = 3.345 Round(d, 2) = 3.34 (对)
s = 4.345 Round(s, 2) = 4.34 (对)
d = 4.345 Round(d, 2) = 4.34 (对)
可以发现这错误的发生是毫无规律的,有时候真能让人发疯!
VB6中Mod 运算符功能是两数相除求余。
如果两数中带小数,Mod 会先四舍六入取整,再按整数求余,余数带小数的话只取整数部分。
注意,如果有书说四舍五入,是错的。
在 VB6 用的是所谓银行家算法,是四舍六入:
小数部分比 0.5 小就舍(例如0.4,0.49999),比 0.5 大就进(例如0.6,0.500001),
刚好是 0.5 可能舍可能进,如果小数点前面是偶数就舍(例如2.5 得 2),是奇数就进(例如3.5 得 4)。
Mod 运算符在VB.NET中有改动,余数可以带小数。
以上资料来自:
所以2.5 mod 2结果是0
round是vb6.0的吧,我刚才查了一下,在vb.net里变成了枚举了成员为
成员名称 说明
RoundToBillionth 数字四舍五入为 9 个小数点位。
RoundToHundred 数字四舍五入为百位数。
RoundToHundredMillionth 数字四舍五入为 8 个小数点位
RoundToHundredth 数字四舍五入为 2 个小数点位
RoundToHundredThousand 数字四舍五入为十万位数。
RoundToHundredThousandth 数字四舍五入为 5 个小数点位。
RoundToMillion 数字四舍五入为百万位数。
RoundToMillionth 数字四舍五入为 6 个小数点位
RoundToTen 数字四舍五入为十位数。
RoundToTenBillionth 数字四舍五入为 10 个小数点位
RoundToTenMillionth 数字四舍五入为 7 个小数点位
RoundToTenth 数字四舍五入为 1 个小数点位。
RoundToTenThousand 数字四舍五入为万位数。
RoundToTenThousandth 数字四舍五入为 4 个小数点位。
RoundToThousand 数字四舍五入为千位数。
RoundToThousandth 数字四舍五入为 3 个小数点位。
RoundToUnit 数字四舍五入为个位数。要求
“四舍六入五成双”,也即“4舍6入5凑偶”这里“四”是指≤4 时舍去,"六"是指≥6时进上,"五"指的是根据5后面的数字来定,当5后有数时,舍5入1;当5后无有效数字时,需要分两种情况来讲:①5前为奇数,舍5入1;②5前为偶数,舍5不进。(0是偶数)
也就是非整数时,先round函数取整,再求余。这个算法与excel 不同
round(-7.2)=-7, round(-3.5)=-3, round(2.5)=2, round(1.5)=2
这些整数再取余,应该就好理解了