先说明数据库为sql server ,allcharge 为float型,RsTT!allcharge的值为119.935            Ac = Int((RsTT!allcharge) * 100 + 0.5) / 100        '四舍五入
            Debug.Print Ac结果为: 119.93

解决方案 »

  1.   

    你是不是把RsTT!allcharge直接换成了119.935?如果是这样的话,结果的确是119.94 所以我就觉得很奇怪,怎么会这样?
      

  2.   

    Ac = Int(CStr((RsTT!allcharge)) * 100 + 0.5) / 100        '四舍五入
                Debug.Print Ac
    结果为: 119.94 这是为什么?谁能给我一个答案?
      

  3.   

    int(119.935*100+0.5)/100
    不等于119.94等于什么???!!!!!!!
      

  4.   

    119.935 * 100 =11993.5
    11993.5 + 0.5 = 11994
    int(11994) =11994
    11994/100 =119.94
    你说是它等于什么?
      

  5.   

    Round函数
          
    描述返回一个数值,该数值是按照指定的小数位数进行四舍五入运算的结果。语法Round(expression [,numdecimalplaces])Round函数语法有如下几部分:部分                描述 
    expression          必需的。要进行四舍五入运算的数值表达式。 
    numdecimalplaces    可选的。数字值,表示进行四舍五入运算时,小数点右边应保留的位
                        数。如果忽略,则Round函数返回整数。 
      

  6.   

    DieGhost(☆死鬼过过) ,你白痴啊
                Ac = Int((RsTT!allcharge) * 100 + 0.5) / 100        '四舍五入
                Debug.Print Ac
                Ac = Int(CStr((RsTT!allcharge)) * 100 + 0.5) / 100        '四舍五入
                Debug.Print Ac结果为:       
    119.93
    119.94 
    ?????????????????????????????
      

  7.   

    你说话别那么难听!
    Dim a As Single
    a = 119.935
    Debug.Print Int(a * 100 + 0.5) / 100
    结果为:119.93
    Dim a As Single
    a = 119.935
    Debug.Print Int(cstr(a) * 100 + 0.5) / 100
    结果为:119.94你看清楚你自己在数据库里面字段的类型
      

  8.   

    Dim a As Single
    a = 119.935
    Debug.Print a 
    Debug.Print a*100 
    Debug.Print (a * 100) + 0.5结果为:  
     119.935 
     11993.5 
     11993.9997558594  ????????????????????????????????????????????????????
      

  9.   

    var a:Single;
    begin
    a:=119.935 ;
    showmessage(FloatToStr(a*100+0.5));
    end;在delphi中结果也是11993.9997558594
      

  10.   

    DieGhost(☆死鬼过过) ,向你道歉
    Dim a As Single
    a = 119.935
    Debug.Print a
    Debug.Print a * 100
    Debug.Print (a * 100) + 0.5
    Debug.Print CStr(a * 100) + 0.5结果:
     119.935 
     11993.5 
     11993.9997558594 
     11994看来只能用cstr()来解决了
      

  11.   

    我试了一下,应该这么解释:在
    Ac = Int((RsTT!allcharge) * 100 + 0.5) / 100        '四舍五入
    Debug.Print Ac中,RsTT!allcharge的数据类型如楼主所说是float型,
    当它在vb自动中会转换为vb中的Single 类型,这样得到的 Ac 就是 119.93了,
    如果使得转换成 Double 型,Ac 就是 119.94了。
    这个问题应该时vb对于数据类型的默认转换造成的。
      

  12.   

    主要是浮点问题造成的,因为计算机是以二进制方式运算的,
    所以float型存储的值是近似值,不要认为是加法和乘法就不会有那种近似值出现
    要知道计算机是二进制运算的。
    其他的呢,xo2000(平凡人生) 都说了,我也就不罗嗦了
      

  13.   

    pinelee(我心依旧) 说的对,不用大惊小怪的,以前有个这样的帖子,很详细的。
      

  14.   

    Ac =format(RsTT!allcharge,"standard")
    Debug.Print Ac
      

  15.   

    计算机中浮点数是离散分布的。所以绝大多数的数只能以一个接近它的数来表示,接近的程度依赖于数的精度(单精度,双精度)。例如 0.1就可能表示为 0.0999999999... 或 0.1000000001...(计算机中是由一个二进制的小数和一个阶码表示) 由于存在精度上的误差就出现你说讲到的现象。8.28725321453883 和 8.28725321453882 在计算机中的表示可能存在误差,所以结果存在误差就不奇怪了。8.2872 - 8.2871 =0.0001 和 9.99999999997669E-05 只相差 0.0000000000000002331 已经很精确了。 
        用浮点就是这样! 
        由于上述原因,一般在比较浮点数一般不使用等号。也就是说,不使用8.2872 - 8.2871 =0.0001这样的形式,而是看两个浮点的差的绝对值是否非常接近零,如Abs(8.2872 - 8.2871 - 0.0001) < 1e-10就认为8.2872 - 8.2871 =0.0001了。
      

  16.   

    同意 rappercn(rapper)
    正是因为浮点数的问题,取出来的值可能是119.9349999.......