关于 double 与 float 类型的问题
在最近的开发当中碰到了一个问题 用的Vs2008
double a = 10.64;
float b = 10.64f;
我在进行两个值比较的时候 B大于A
但是如果是
double a = 10.32;
float b = 10.32f;
那么就是 A大于B了 可能就是精度的问题他们在各自四舍五入的情况下长度就不一样了。但是程序里面检测的值是一样的。费解
最纠结的莫过于
double aaa =(Convert.ToDouble("877.80") + Convert.ToDouble("-6.32"));
坑爹啊 为什么得出来的是871.4999999 呢?
还有
我有一个存储过程
--@A1 nvarchar(50) output,
--@A2 nvarchar(50) output 这两个都是存储过程返回结果 值都都一样的为11905750
--SELECT @A1=sum(GuoJBTE*ShuL) as A1 FROM Tbl_Apply1
-- SELECT @A2=[gbzj] FROM t_FeiY
然后我后台代码
↓↓这个接收的@A1 SY得到的值却是11900600.0 然后ToDouble()里面选中添加监视的值是1.19006e+007
Double SY= Convert.ToDouble(db.GetParameterValue(cmd11, "@A1").ToString())
↓↓这个接收的@A2 FP得到的值就是11905750.0 然后ToDouble()里面选中添加监视的值也是11905750.0
Double FP = Convert.ToDouble(db.GetParameterValue(cmd11, "@guobfp").ToString());
虽然说是两个语句检索的值 但是结果是一样的 返回的类型也一样 接收后强转方式也一样 为什么最后的值就不一样了? 很奇怪 费解!!!! 有木有大神 解答一下
[最优解释]
对于小数,最好的方法是采用高精确数值类型: decimal 你可用百度 搜索一下这个类型的用法, 一看就明白.
[其他解释]
decimal SY= Convert.ToDecimal(db.GetParameterValue(cmd11, "@A1").ToString())
添加监视看一看这是什么效果.
[其他解释]
为什么要一会 float 一会 double 呢?搞个统一的不行吗
[其他解释]
float与Double 对比只是无意中发现的。代码中肯定不会用这两个去对比的
主要就是想知道 为什么两个Double 相加一个为负数算出来的值就是871.499999
还有就是得到存储过程值的问题
[其他解释]