以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]明明相等,却不知为何执行了?  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=189427)

--  作者:wyz20130512
--  发布时间:2023/11/30 20:57:00
--  [求助]明明相等,却不知为何执行了?
二者明明值是相等的,不知为何会弹出提示框?请老师指点!

图片点击可在新窗口打开查看

CurrentChanged代码:

If Forms("应收款").Opened Then
    
    Dim t2 As WinForm.Table = Forms("应收款").Controls("Table2") \'子表
    Dim jzhje As WinForm.NumericComboBox = Forms("应收款").Controls("ncb_JZHJE") \'记账金额
    Dim fpje As WinForm.NumericComboBox = Forms("应收款").Controls("ncb_fpje") \'发票金额
    jzhje.FormatString = "#,###.00"
    fpje.FormatString = "#,###.00"
    If e.Table.Current IsNot Nothing Then
        jzhje.Value = 0 \'初始化,以免形成累计值。
        
        \'通过For Each Next循环取得当前行所有数值列的总和。
        For Each c As Col In e.Table.Cols
            If c.IsNumeric Then
                jzhje.Value = jzhje.Value + e.Table.Current(c.Name)
            End If
        Next
    End If
\'    Filter = "账单编号 = \'" & e.Table.Current("账单编号") & "\'"
    fpje.Value = t2.Table.Compute("Sum(金额)") + t2.Table.Compute("Sum(税额)")
    
    \'若二者金额不一致,则弹出提示框,并将其底色设置为红色。
    If jzhje.Value <> fpje.Value Then
        jzhje.BackColor = Color.Red
        fpje.BackColor = Color.Red
        MessageBox.Show("【记账金额】与【发票金额】不相符!" & vbCrLf & "请核查!", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning)
    Else
        jzhje.BackColor = Color.NavajoWhite
        fpje.BackColor = Color.NavajoWhite
    End If 
End If
[此贴子已经被作者于2023/11/30 21:03:25编辑过]

--  作者:有点蓝
--  发布时间:2023/11/30 21:26:00
--  
调试
dim a as Decimal =  jzhje.Value
dim b as Decimal =  fpje.Value
msgbox(a)
msgbox(b)
msgbox(a=b)
    If a <> b Then
        jzhje.BackColor = Color.Red

--  作者:wyz20130512
--  发布时间:2023/12/1 8:59:00
--  
图片点击可在新窗口打开查看
--  作者:有点蓝
--  发布时间:2023/12/1 9:01:00
--  
控件是不是绑定列,把绑定的列改为高精度列
--  作者:wyz20130512
--  发布时间:2023/12/1 9:05:00
--  
没有绑定,数值列均为“双精度”。
--  作者:wyz20130512
--  发布时间:2023/12/1 9:25:00
--  
这是不是二进制在处理小数时的缺陷?

If CInt(jzhje.Value) <> CInt(fpje.Value) Then
        jzhje.BackColor = Color.Red
        fpje.BackColor = Color.Red
        MessageBox.Show("【记账金额】与【fa piao金额】不相符!" & vbCrLf & "请核查!", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning)
    Else
        jzhje.BackColor = Color.NavajoWhite
        fpje.BackColor = Color.NavajoWhite
    End If 

将其转换为整数,问题解决了,但仍旧不明白为什么会出现计算的误差。

--  作者:有点蓝
--  发布时间:2023/12/1 9:29:00
--  
请上传实例测试
--  作者:wyz20130512
--  发布时间:2023/12/1 10:30:00
--  
图片点击可在新窗口打开查看
--  作者:wyz20130512
--  发布时间:2023/12/1 10:31:00
--  
上传附件失败?
--  作者:wyz20130512
--  发布时间:2023/12/1 10:31:00
--  
图片点击可在新窗口打开查看