用text不就好了。在用val函数转换回来不是很好吗?

解决方案 »

  1.   

    可我也是双精度,  
    ?text , 我也是TEXT 转换过去的呀
    VAL() CDBL()保存的时候,还是这样,VB 我打的是SP4
    不知道还有什么方法等会儿,我把程序贴上来,大家给看看
      

  2.   

    de.rsKuCun("金额") = de.rsJinHuo("进数") * de.rsJinHuo("进价") _
                + de.rsKuCun("金额")de=DataEnvironment
    其实在未使用ACCESS时, 如 
    lblChaJiaSunyi.Caption = (TxtInput(2).text - de.rsShangPinZiLiao.Fields("进价")) * lblZongKuCunLiang.Caption 时
    TxtInput(2).text =4.5
    de.rsShangPinZiLiao.Fields("进价")=4.5
    可是两者一减为0,再一乘,就多出小数点后的数字了大家帮忙看看,分数虽然不算什么,对大家也算一种感谢方式吧
      

  3.   

    方法呢?  解决方法啊!  在SQL中也是这样,肯定有方法的。
      

  4.   

    WYO,你用什么数据库,
    真快要死了,再一次,请大家帮帮忙,在保存进ACCESS后,用ACCESS看,是正常的,可一读进
    MSHFlexGrid里,5.4 成了  5.400001 ,4.2 成了 4.199999 晕哪!!!!!!!!!!
    有什么方法没有啊!OLD_VB_FAN:
    不太明白,你的意思,不过我用过@了,开始以为没事了,可输入数值一大,一样会出现这种
    误差恳请各位,能帮我想想办法,在这我先谢谢大家了
      

  5.   

    我限制成4位小数,可好,它就是 5.4001 真烦!
    大家能否把工作平台,写上来看一下,
    不知道,是不是工作平台的原因,
    我的VB平台是  WIN98+VB6+SP4
      

  6.   

    jisheng:
    狼兄啊。。
    不是我不想,有些地方,没法用啊,如MSHFlexGrid
      

  7.   

    这可能是数据库的精度不够,如果你的数据库精度够的话,检查一下是否是访问问题,你用VB是使用ADO还是OLEDDB来访问数据库,也有可能是因为这两个驱动本来在转换数据的精度时就有问题
      

  8.   

    我在使用ADO时也会有这样的问题发生,后来,呵呵,反正是显示用的,就让它变成字串,至于内存,不管了。呵呵。
      

  9.   

    :土八路
    很烦的,很慢的,这不是把房子拆了,那微软做什么,他不白拿钱了
    :ZZH
    精度是够了,可能就是你说ADO驱动的原因,不过我发现还有几种原因,跟微软有关
    :Joeking
    HI,解决就好,管它什么方法,是吧,不过,我这是写回数据库,怎么办。我这还有一个问题,也是关于ACCESS的,大家帮忙看一下吧。
    http://www.csdn.net/expert/topic/187/187633.shtm
      

  10.   

    我的建议一:用整数保存,运算时考虑小数点位置。
    建议二:全部采用字符串(输入、计算、保存、显示)。下面是字符串运算的函数(抱歉,现在只有乘法):'Module1Option ExplicitPublic Len1 As Integer
    Public Len2 As Integer
    Public Len3 As Integer
    Public strResuilt As String
    Public Dot1 As Integer
    Public Dot2 As IntegerPublic Function Multiply(ByVal str1 As String, ByVal str2 As String) As String
        Dim I As Integer
        Dim J As Integer
        Dim X As Integer
        Dim Y As Integer
        Dim Z As Integer
        If Not (IsRight(str1, Dot1) And IsRight(str2, Dot2)) Then
            Multiply = "ÊäÈëÊý×ÖÓдí"
            Exit Function
        End If
        'a = StrPtr(strResuilt)
        
        str1 = Trim(str1)
        str2 = Trim(str2)
        Len1 = Len(str1)
        Len2 = Len(str2)
        Len3 = Len1 + Len2
        strResuilt = Space(Len3)
        
        For I = Len1 To 1 Step -1
            For J = Len2 To 1 Step -1
                X = Val(Mid(str1, I, 1))
                Y = Val(Mid(str2, J, 1))
                Z = X * Y
                SumUp I, J, Z, Len(Trim(Str(Z)))
            Next
        Next
        strResuilt = Left(Trim(strResuilt), Len(Trim(strResuilt)) - Dot1 - Dot2) & "." & Right(Trim(strResuilt), Dot1 + Dot2)
        If (Dot1 + Dot2) <> 0 Then
            For I = Len(Trim(strResuilt)) To 1 Step -1
                If Mid(strResuilt, I, 1) = "0" Then
                    Mid(strResuilt, I, 1) = " "
                Else
                    Exit For
                End If
            Next
        End If
        Multiply = Trim(strResuilt)
        If Mid(Multiply, Len(Multiply), 1) = "." Then
            Multiply = Left(Multiply, Len(Multiply) - 1)
        End If
    End FunctionSub SumUp(ByVal I As Integer, ByVal J As Integer, ByVal Num As Integer, ByVal L As Integer)
        Dim T As Integer
        For T = 1 To L
            Carry J + I + 1 - T, Val(Mid(Trim(Num), (L - T + 1), 1))
        Next
    End SubPublic Sub Carry(ByVal S As Integer, ByVal V As Integer)
        Dim VV As Integer
        
        VV = Val(Mid(strResuilt, S, 1)) + V
        If VV >= 10 Then
            Mid(strResuilt, S, 1) = Trim(Str(VV Mod 10))
            Carry S - 1, VV \ 10
        Else
            Mid(strResuilt, S, 1) = Trim(Str(VV))
        End If
    End SubPrivate Function IsRight(ByRef str1 As String, ByRef Dot As Integer) As Boolean
        Dim I As Integer
        Dim NumDot As Integer
        str1 = Trim(str1)
        IsRight = True
        NumDot = 0
        Dot = 0
        For I = 1 To Len(str1)
            If Mid(str1, I, 1) < "0" And Mid(str1, I, 1) = "." Or Mid(str1, I, 1) >= "0" And Mid(str1, I, 1) <= "9" Then
                If Mid(str1, I, 1) = "." Then
                    NumDot = NumDot + 1
                        Dot = Len(str1) - I
                    If NumDot > 1 Then
                        IsRight = False
                        Exit For
                    End If
                End If
            Else
                IsRight = False
                Exit For
            End If
        Next
        If IsRight Then
            str1 = Replace(str1, ".", "", 1)
        End If
    End Function/下面是form中的代码Option ExplicitPrivate Sub Command1_Click()
        Text3.Text = Multiply(Text1.Text, Text2.Text)
        'Text4.Text = Multiply1(Text1.Text, Text2.Text)
    End SubPrivate Function Multiply1(a As String, b As String) As String
        Dim strResult As String
        Dim strTem As String
        Dim lngTem As Long
        Dim intX As Integer
        Dim intY As Integer
        For intX = 1 To Len(a)
            'Debug.Print Mid(a, Len(a) - intX + 1, 1)
            strTem = ""
            For intY = 1 To Mid(a, Len(a) - intX + 1, 1)
                strTem = Add(strTem, b, 0)
            Next intY
            strResult = Add(strResult, strTem & MutiChar("0", intX - 1), 0)
        Next intX
        Multiply1 = strResult
    End Function
    Private Function Add(a As String, b As String, inValue As Integer) As String
        Dim Upvalue As Integer
        Dim X As String
        Dim Y As String
        If a = "" Then a = 0
        If b = "" Then b = 0
        Upvalue = CInt(Right(a, 1)) + CInt(Right(b, 1)) + inValue
        If Len(a) = 1 And Len(b) = 1 Then
            Add = CStr(Upvalue)
        Else
            If Len(a) = 1 Then X = "0" Else X = Left(a, Len(a) - 1)
            If Len(b) = 1 Then Y = "0" Else Y = Left(b, Len(b) - 1)
            If Upvalue >= 10 Then
                Add = Add(X, Y, 1) & CStr(Upvalue - 10)
            Else
                Add = Add(X, Y, 0) & CStr(Upvalue)
            End If
        End If
    End Function
    Private Function MutiChar(m As String, number As Integer) As String
        Dim X As Integer
        Dim strTem As String
        For X = 1 To number
            strTem = strTem & m
        Next X
        MutiChar = strTem
    End FunctionPrivate Sub Form_Load()End Sub
      

  11.   

    同意大侠的意见,确定小数位(ACCESS中),如果你愿不怕麻烦,不妨用“字符串”类型,只是在参与计算等操作时要记得进行转换
      

  12.   

    我在程序中将ACCESS数据表导出为HTML文件时,遇到过类似问题,后来发一,同有一个SCHEMI.INI文件控制着各字段的类型,于是将有的地方的FLOAT改为INTEGER即OK了,但ACCESS自身的数据类型可在ACCESS中定义的
      

  13.   

    没有,谢谢大家,问题,的解决方法 ,我以经找到了,
    limengchen:的说法给我的启发,很大huanggx(大侠) :辛劳你,写贴了这么长的程序,谢谢
    OLD_VB_FAN(蓝星) :不反对使用字符串,不过我还是想有合适的解决,因为"曲线救国"太慢了,@@这是根本之道,以前我用@@虽然没用彻底解决问题,但思路是对的,所以不过如何,我也要对你说声谢谢
    zzh():正如你所说的,这应该是驱动的问题,谢谢
    yeya(鸭鸭) :欢迎你,感谢你热情的帮助
    这次问题主要都是因为微软的控件和ADO引起的。
    所以去掉了一些控件,ADO,就没有办法了,
    不知道楼上的朋友,用什么方法解决了这些问题,如果有什么高见,请联系我EMAIL:[email protected]
    OICQ:15424257
    现在,在用CE,VB,VC,这方面的朋友能否加上QQ,多交流一下