หาที่ผิดไม่เจอใน Report

   
ผมมี Table มี field คือ
Field > no, qty , price
มีค่า
Rec 1 01, 4250 , 2.15
Rec 2 01, 1330 , 1.95
เวลาสร้าง Report form มี Group ที่ No
ส่วน Detail มี field qty*price คือ 4250*2.15 = 9137.50
และ 1330*1.95 =2593.50

ส่วน Page footer จะมี field (ค่า Sum) คือ round(qty*price*7/100,2)
ซื่งค่าตัวเลขที่ได้เท่ากับ 831.18 แต่ความเป็นจริง ควรเป็น 831.17 ทั้งๆที่ลองเปลี่ยนเป็น Round(qty*price*7,2) ก็ได้ 83117.00 เป็นเพราะเหตุใดก็ไม่ทราบได้ว่าทำไมถึงปัดเศษผิด
งงๆ
24 ก.พ. 47 เวลา 11:41:45 น. --> 202.57.175.162,
   
   
ROUND() Function เป็นการปัดเศษ ดังนั้นมันปัดตามกฎ เศษ < o.5 --> 0, > 0.5 --> 1 ตามปรกติ
ลองเปลี่ยนมาใช้ TRANSF(qty*price*7/100,'###,###.##')

....
24 ก.พ. 47 เวลา 12:46:40 น. --> 203.156.20.223,
  
   
ผลก็ถูกต้องแล้ว เป็นการรวมเลขที่ round มาเรียบร้อยแล้วครับ
สมบัติ
24 ก.พ. 47 เวลา 14:18:36 น. --> 202.12.97.100,
  
   
แต่เวลาคุณใช้ ?Round((4250*2.15+1330*1.95)*7/100,2) ค่ากลับได้ 871.17 ไม่เท่าในรายงาน
งงๆ
24 ก.พ. 47 เวลา 18:28:45 น. --> 203.150.32.4, w
  
   
The display of qty*price*7/100 is already round but the exact value is not as it display
Once you have summed the value, it will use the real value not the display value.
If you are using sum of round(qty*price*7/100,2) at the report footer, it will make those real value equal to the display value. So, it is 639.63+181.55 = 871.18

To make it right for taxes calculation purpose.

- Create a Report Form Variable name ntotal.
- Sum the value of qty*price to ntotal. This will make the sum of real value which is 639.625+181.545 = 871.17
- At the report footer, round(ntotal*7/100,2) for tax. and ntotal for Total Before Taxes
joe
24 ก.พ. 47 เวลา 23:07:44 น. --> 68.100.170.115,
  
   
CORRECTION:
The DISPLAY of qty*price*7/100 is already round but the REAL value is not as it DISPLAY value.
Once you have summed the value, it will use the REAL value not the DISPLAY value.
If you are summing ROUND(qty*price*7/100,2) at the report footer, it will convert every record DISPLAY value into REAL value. So, it is 639.63+181.55 = 871.18 (DISPLAY value of the REAL value that is ROUNDed) instead of 639.625+181.545 = 871.17 (REAL Value)

To make it right for taxes calculation purpose.

- Create a Report Form Variable name ntotal.
- Sum the value of qty*price to ntotal. This will make the sum before calculating the tax. It is using the real value not the display value...
- At the report footer, round(ntotal*7/100,2) for tax. and ntotal for Total Before Taxes

Hope that helps...
joe
24 ก.พ. 47 เวลา 23:14:35 น. --> 68.100.170.115,
  
   
a=4250*2.15 ** 9137.50
b=1330*1.95 ** 2593.50

สิ่งที่คุณเขียนที่ footer ระบบ จะคำนวณอย่างนี้ครับ
(1) round(a*7/100,2)+round(b*7/100,2) = 639.63+181.55 = 821.18
แต่
(2) round((a+b)*7/100,2) = 821.17 นั่นคือตัวเลขที่คุณต้องการ

ซึ่งจริงๆ แล้ว โดยทั่วไปบริษัทจะใช้กรณี (1) ลองคิดดูดีๆนะครับ กรณี 2 ถ้าคุณมี จำนวน ข้อมูล หลายๆ record การเลือกในการคำนวณแต่ละครั้ง มีจำนวน record ไม่เท่ากัน อย่างเช่น มี 5 record ครั้งแรก เลือก 1,3,5 พิมพ์ ได้ค่า vat R1 เลือก 4,5 ได้ค่า vat R2
ครั้งที่ สอง 1,4 พิมพ์ ได้ค่า vat R3 เลือก 2,3,5 พิมพ์ ได้ค่า vat R4 ผลรวมของ vat ทั้งหมด ในครั้งแรก R1+R2 กับ ครั้งที่สอง R3+R4 อาจจะไม่เท่ากันก็ได้ลองเก็บไปคิดดูนะครับ แต่ ถ้า คุณ Round ค่า vat ที่ได้ในแต่ละ record ก่อน R1+R2 = R3+R4 เสมอ ครับ อืม

แต่ทั้งนี้ทั้งนั่นขึ้นอยู่กับ การ design database ด้วย ถ้าคุณต้องการเก็บ vat ที่ header โดย record ที่คุณให้มาเป็น detail และ fix เสมอ ว่า detail นี้คือข้อมูลใน header และไม่มีการเลือกพิมพ์ detail นั้นๆอีก ก็อาจจะคำนวณ vat แบบที่สอง ได้ และ นำค่าไปเก็บไว้ที่ header แล้ว แต่กรณีไปหนะครับ
Old Fox
25 ก.พ. 47 เวลา 9:07:13 น. --> 202.57.133.247,
  
ขอเชิญร่วมตอบคำถามครับ
 
ผู้ตอบ :
รหัสผ่าน :
รูปภาพ :
คำตอบ :