VB.NET中double 1900怎么算出1900.0000000000002?
vb.net吧
全部回复
仅看楼主
level 1
蓝梦妖蝶
楼主
1900.0000000000002=1E-05*190000000
这是为什么?不应该1900吗
2019年05月30日 05点05分
1
level 7
xcztb
用了是round是吗?这个函数不知道为什么会这样
2019年05月30日 12点05分
2
蓝梦妖蝶
没有,设为single就好了。但是single在别的数时也会错。
2019年05月31日 05点05分
xcztb
@蓝梦妖蝶
存入数据库时有计算时会这样,可以在写入时用convert(decimal(18,4),sum(amount)),4代表取四位小数,如果高于四位,取四位,如果少于四位,取当前位数
2019年05月31日 13点05分
蓝梦妖蝶
@xcztb
那么大神,这个应该如何解决和规避呢?
2019年06月01日 14点06分
level 12
借天地一缕清音
浮点本来就是这样的吧
2019年06月01日 23点06分
3
蓝梦妖蝶
但是我判断是不是整数,就出问题了。
2019年06月03日 04点06分
level 1
魔法软糖K
使用decimal来运算就可以解决了。就是很慢。
2019年06月02日 08点06分
4
蓝梦妖蝶
太大了吧。有其他方法吗?
2019年06月03日 04点06分
魔法软糖K
数据量不大(10万个变量以内)的话可以一用,现在电脑性能过剩。我做游戏内部数据都是decimal,每秒60帧300万次运算还是没问题的
。至于内存,16个字节,100万也才占16M,现在内存都8G了,根本不怕。
2019年06月05日 10点06分
level 1
蓝梦妖蝶
楼主
问题的关键在于我想判断是不是整数
我用了if a=int(a) 的模式
这导致出现这种情况时,本该认为是整数,但却没有。
2019年06月03日 04点06分
5
level 1
蓝梦妖蝶
楼主
我发现如果把算法改为先乘后除,可以避免这种问题。但是先乘后除又怕数据溢出。这可怎么办
2019年06月03日 04点06分
6
level 1
魔法软糖K
还有种方法。用长整型Long运算,比如24000就表示24,写入数据库时改为24.000就行了(不要用除以1000,会不准确,转化为string,在右数第三位添加小数点)。从数据库读取时乘以1000(自己加个溢出检查),长整型的位数很多的,我记得是18位,百亿亿级别。长整型计算比double型快。
2019年06月05日 10点06分
8
1