
正文
vb.net双精度 vb中的单精度和双精度
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
VB.net round问题
这应该是由浮点数的误差所造成的,你把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 (对)
可以发现这错误的发生是毫无规律的,有时候真能让人发疯!
相关问答
Q1: vb.net中如何解决公式计算的精确度问题
仅仅是普通表达式vb.net双精度的话vb.net双精度,定义数据类型,比如从单精度改为双精度,如果想保留小数点位数,用formatnumber来处理。如果是某个算法vb.net双精度的精度,就要复杂一些,要定义一个误差,在算法迭代过程中,用while语句判断计算结果vb.net双精度的残差是否小于定义的误差值,至于残差如何计算,与vb.net双精度你的算法有关
Q2: VB.NET中如何将单一项显示为小数点。
vb.net双精度我靠.你这个要求奇葩哦.都是控制一列的数据类型.你要这样.那你数据库就全部定义成双精度的类型.在读取的时候.
当前行为第一行的CTYPE(内容,De....) 忘记vb.net双精度了.这样你第一行就是带小数点的
判断当前行数大于1.全部 CTYPE(内容,INTEGER) 就可以了. 这样一来.第二行开的的全部都是整数型的了
Q3: 关于VB.net取整的问题
double是双精度 有效数值位52位 表示成指数vb.net双精度的形式 即指数11位 即表示成
所以180.89305用2进制表示是10110100.1110010010011110111011001011111110110001010110110101
即
180.89305在double中存在vb.net双精度的实际数值是
1.01101001110010010011110111011001011111110110001010110110101 *2^7
取小数点后 52位有效值后 等于10进制的180.893049999999998
所及加最后变成vb.net双精度了 1808930.99999999998
第一次当然输出近似值1808931
第二次int函数去掉vb.net双精度了小数点后的数int就是只取整数的部位的不是四舍五入 所以少了1
Q4: VB.NET中单精度浮点与双精度浮点的实质区别是什么
单精度只保留6位有效数字。另外双精度可以保留15位数字。这是2者最明显的区别。
Q5: vb.net中 使用decimal,double类型的区别
非整数类型包括Decimal(128位)定点数、Single(32位)单精度浮点数和Double(64位)双精度浮点数。他们都是有符号类型。定点数取值不允许有舍入vb.net双精度的误差,而浮点数允许有舍入vb.net双精度的误差。浮点数的表示形式为:mmmEeee其中mmm为屦,而eee为指数(以10为底),对于非整数类型,值类型D表示Decimal,F表示Single,R表示Double。数字类型一般情况下可以直接相互进行转换.
关于vb.net双精度和vb中的单精度和双精度的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。







