กระทู้เก่าบอร์ด อ.สุภาพ ไชยา
324 2
URL.หัวข้อ /
URL
ทศนิยมปัดแล้วมีปัญหาครับ
ถามหน่อยครับ
Function Roundstang(ByVal DblNumber As Double)
Dim intStang As Integer
Dim Lngbaht As Long
Dim rtnNumber As Double
If InStr(DblNumber, ".") = 0 Then
rtnNumber = DblNumber
Else
intStang = Mid(DblNumber, InStr(DblNumber, ".") + 1)
If DblNumber > 1 Then
Lngbaht = Left(DblNumber, InStr(DblNumber, ".") - 1)
Else
Lngbaht = 0
End If
Select Case intStang
Case Is <= 25
rtnNumber = Lngbaht + Me.Force16
Case Is <= 50
rtnNumber = Lngbaht + Me.Force18
Case Is <= 75
rtnNumber = Lngbaht + Me.Force20
Case Is <= 99
rtnNumber = Lngbaht + Me.Force22
Case Else
rtnNumber = Lngbaht + (Me.Force22)
End Select
End If
Roundstang = Format(rtnNumber, "#,##0.00")
End Function
หมายเหตุ
me.force16 = .25
me.force18 = .50
me.force20 = .75
me.force22 = 1
ผมมีปัญหายอดเงินที่มีทศนิยมเป็น .30 , .40 , .50 ,.60 , .70 , .80 , .90 จะปัดเป็น ยอดเงิน.25 เสมอ เป็นเพราะอะไรครับ
ปล.โค้ดได้จากที่นี่แหละครับ
Function Roundstang(ByVal DblNumber As Double)
Dim intStang As Integer
Dim Lngbaht As Long
Dim rtnNumber As Double
If InStr(DblNumber, ".") = 0 Then
rtnNumber = DblNumber
Else
intStang = Mid(DblNumber, InStr(DblNumber, ".") + 1)
If DblNumber > 1 Then
Lngbaht = Left(DblNumber, InStr(DblNumber, ".") - 1)
Else
Lngbaht = 0
End If
Select Case intStang
Case Is <= 25
rtnNumber = Lngbaht + Me.Force16
Case Is <= 50
rtnNumber = Lngbaht + Me.Force18
Case Is <= 75
rtnNumber = Lngbaht + Me.Force20
Case Is <= 99
rtnNumber = Lngbaht + Me.Force22
Case Else
rtnNumber = Lngbaht + (Me.Force22)
End Select
End If
Roundstang = Format(rtnNumber, "#,##0.00")
End Function
หมายเหตุ
me.force16 = .25
me.force18 = .50
me.force20 = .75
me.force22 = 1
ผมมีปัญหายอดเงินที่มีทศนิยมเป็น .30 , .40 , .50 ,.60 , .70 , .80 , .90 จะปัดเป็น ยอดเงิน.25 เสมอ เป็นเพราะอะไรครับ
ปล.โค้ดได้จากที่นี่แหละครับ
2 Reply in this Topic. Dispaly 1 pages and you are on page number 1
1 @R01385
เป็น Bug ของฟังก์ชันผมเองครับ ต้องขออภัย และขอขอบคุณที่ช่วยแจ้งเข้ามาให้ทราบครับ
ช่วยแก้ไข 2 จุดดังนี้ครับ
Function RoundStang(ByVal dblNumber As Double)
Dim intStang As Integer, lngBaht As Long
Dim rtnNumber As Double
If InStr(dblNumber, ".") = 0 Then
rtnNumber = dblNumber
Else
intStang = Mid(dblNumber, InStr(dblNumber, ".") + 1)
intStang = Val(Left(intStang * 10, 2))
If dblNumber > 1 Then
lngBaht = Left(dblNumber, InStr(dblNumber, ".") - 1)
Else
lngBaht = 0
End If
Select Case intStang
Case Is <= 12
rtnNumber = lngBaht
Case Is <= 37
rtnNumber = lngBaht + (25 / 100)
Case Is <= 62
rtnNumber = lngBaht + (50 / 100)
Case Is <= 87
rtnNumber = lngBaht + (75 / 100)
Case Else
rtnNumber = lngBaht + 1
End Select
End If
RoundStang = Format(rtnNumber, "#,##0.00")
End Function
2 @R01387
ขอบคุณครับ
Time: 0.1083s