ทศนิยมปัดแล้วมีปัญหาครับ
กระทู้เก่าบอร์ด อ.สุภาพ ไชยา

 260   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 เสมอ เป็นเพราะอะไรครับ 
ปล.โค้ดได้จากที่นี่แหละครับ

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
ขอบคุณครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.0528s