在最近的开发当中碰到了一个问题 用的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());
虽然说是两个语句检索的值 但是结果是一样的 返回的类型也一样 接收后强转方式也一样 为什么最后的值就不一样了?  很奇怪 费解!!!! 有木有大神 解答一下

解决方案 »

  1.   

    为什么要一会 float 一会 double 呢?搞个统一的不行吗
      

  2.   

    float与Double 对比只是无意中发现的。代码中肯定不会用这两个去对比的
    主要就是想知道 为什么两个Double 相加一个为负数算出来的值就是871.499999
    还有就是得到存储过程值的问题
      

  3.   

    float与Double 对比只是无意中发现的。代码中肯定不会用这两个去对比的
    主要就是想知道 为什么两个Double 相加一个为负数算出来的值就是871.499999
    还有就是得到存储过程值的问题 
      

  4.   

    对于小数,最好的方法是采用高精确数值类型: decimal  你可用百度 搜索一下这个类型的用法, 一看就明白.
      

  5.   

    double
    float 
    精确是不够的,它在小数点后四位的时候会出现与电脑电压跳动有关的数值变动.
      

  6.   

    搞晕了。。
    这个接收的@A1  SY得到的值却是11905800.0 然后ToDouble()里面选中添加监视的值是一个科学计数法 值貌似是十位进百位了
     Double SY= Convert.ToDouble(db.GetParameterValue(cmd11, "@A1").ToString())
      

  7.   

    decimal SY= Convert.ToDecimal(db.GetParameterValue(cmd11, "@A1").ToString()) 添加监视看一看这是什么效果.
      

  8.   

    数据库里面 如果 nvarchar @A1=sum(flot*int) 位数过多的话 @A1就会变成科学计数法 所以@A1类型要用decimal类型的。 程序后太中 小数相加 也使用decimal 类型的相加计算会更加精准。
    程序中 好像Double类型与Float都是近似保存。比如我保存的5  可能就给保存成了4.999999999999 或者是5.000000000001  
      

  9.   

    正常开的时候,无论是数据库还是代码都会用decimaloralce 用number(即使定义为decimal,oralce也只认number)