@ ประกาศใช้งานเว็บบอร์ดใหม่คลิกลิ้งได้ที่โลโก้ ไท.Access หรือกด --> บอร์ดเรียนรู้ Access สำหรับคนไทย 
                         โพสต์ถาม,ตอบที่บอร์ดใหม่ แล้วจะใส่ลิ้งอ้างมาที่บอร์ดนี้หรือไม่ก็ตามสะดวกครับ


Access : จุดเริ่มต้นที่ง่ายที่สุดสำหรับการเรียนรู้ ระบบฐานข้อมูล
Access : จุดเริ่มต้นที่ง่ายที่สุดสำหรับการเรียนรู้ การเขียนโปรแกรม
Access : เป็นได้ทั้งตัวเก็บฐานข้อมูล และตัวจัดการฐานข้อมูล
Thai Access : บอร์ดเสริมการเรียนรู้ Access ด้วยภาษาไทย


Back to Board : Thai Access Webboard

ปรึกษาเรื่องคำสั่งที่ใช้ในการปัดเศษทศนิยมใน Access


Topic by Message Posted : on : 17/2/2555 18:19:25
Cholly  คือต้องการคำนวณค่าแล้วปัดเศษอ่ะค่ะ

ตัวอย่างเช่น 10 * 1.02 = 10.2 อยากจะปัดเศษขึ้นลง Half adjust อ่ะค่ะ
ไม่แน่ใจว่ามี tool อยู่แล้วหรือเราต้องเขียนคำสั่ง VBA ค่ะ

ขอบคุณสำหรับคนที่จะมาตอบน่ะค่ะ

16 Reply in this Topic. Dispaly 1 pages and you are on page number 1

Reply by Message on : 17/2/2555 20:38:14
TTT
(R12195)
อยากให้ลองอ่าน ที่นี่

ถึง Message สุดท้ายของ อ.สันติสุข
val(format(นิพจน์,"#.##")) สำหรับทศนิยม 2 ตำแหน่ง

Back to Top
Reply by Message on : 20/2/2555 21:23:05
Cholly
(R12231)
ขอบคุณค่ะ คุณ TTT พอดีลองใส่คำสั่ง =round(ค่านั้นอ่ะค่ะ) ลองเหมือน excel แล้วมัน work ด้วยค่ะ
Back to Top
Reply by Message on : 21/2/2555 2:33:59
TTT
(R12235)
ระวังนะครับ
การใช้ฟังก์ชั่น Round(), CByte(), CInt(), CLng(), CCur() ใน MS Access มันเป็นการปัดเศษเลขคู่ วิธีการนี้มีชื่อเรียกหลายอย่างเช่น unbiased rounding, convergent rounding, statistician's rounding, Dutch rounding, Gaussian rounding, bankers' rounding แต่สามารถเรียกรวมกันได้ว่าเป็น การปัดเศษเลขคู่ (round-to-even)
หลักการปัดเศษเลขคู่คือ
ถ้าเป็นเลข 1-4 ปัดลง ถ้าเป็นเลข 6-9 ปัดขึ้น ส่วนเลข 5 ดูว่าหน้าเลข 5 ที่จะถูกปัดนั้นเป็นเลขคู่หรือคี่ โดยใช้หลักการเฉลี่ยว่า
ถ้าเป็นเลขคี่-->ปัดขึ้น
ถ้าเป็นเลขคู่-->ปัดลง (โดยถ้าเป็นเลข 0 ถือเป็นเลขคู่)
ฉนั้น ให้คุณทดสอบดู ถ้าเป็น 2.5 มันจะปัดลงเป็น 2 ส่วนถ้าเป็น 3.5 จะปัดขึ้นเป็น 4
สำคัญอยู่ที่เลขทศยมที่เป็น 5 อ่ะครับ มันอาจทำให้ค่ารวมของคุณเพี้ยนจากความต้องการได้ ให้คุณศึกษาและทดสอบดูก่อนใช้ Round() ว่าตรงกับความต้องการคุณหรือเปล่า ถ้าคุณต้องการแบบ round-half-up (Arithmetic Rounding) ผมแนะนำให้ใช้แบบของ อ.สันติสุข จะตรงที่สุด ตัวอย่าง
Round(2.5) = 2 ถ้าเป็น Val(Format(2.5,"#")) = 3
Round(3.5) = 4 ถ้าเป็น Val(Format(3.5,"#")) = 4
Back to Top
Reply by Message on : 21/2/2555 2:52:06
TTT
(R12236)
สรุป ตามความเห็นผมคือ ถ้าเป็นการสรุปผลรวมทางการเงิน หรือค่าเฉลี่ยแบบผลรวมตัวเลขมากๆ แล้วค่าที่ได้จะไม่เฟ้อเกินไป การใช้ Round() ถือว่าเหมาะสม แต่ถ้าเป็นค่าที่เข้าสูตรที่เจาะจงให้ปัดเศษขึ้นที่เลข 5 แล้ว การใช้ ฟังก์ชั่น Round() ใช้ไม่ได้ครับ
ยังไงลองศึกษาดูได้ ในเว็บหลายเว็บมีเขียนไว้ หาได้จาก Google
Back to Top
Reply by Message on : 2/3/2555 19:23:28
Cholly
(R12316)
คุณ TTT

การใช้คำสั่ง round เป็นแบบที่คุณ TTT บอกเลยค่ะ ^^ ไม่เวิร์ค

แล้วลองเอาคำสั่ง Val(Format(3.5,"#")) = 4 มาใช้โอเคแก้ไขปัญหาได้เลยค่ะ

ขอบคุณมากๆๆๆๆน่ะค่ะ
Back to Top
Reply by Message on : 20/8/2556 14:07:12
jantanee
(R16868)
นำไปใช้เเล้ว ใช้ได้ผลจริง ๆ ขอบคุณมากค่ะ
แต่ถ้าเราต้องการทศนิยม 2 ตำแหน่ง โดยไม่ปัดทศนิยม
เช่น 2.66666 เป็น 2.66
หรือ 3.000 เป็น 3.00
รบกวนด้วยค่ะ
Back to Top
Reply by Message on : 20/8/2556 14:28:18
Saifar
(R16869)
รู้จักคำสั่ง InStr หรือเปล่าครับ เป็นการนับตำแหน่งที่จากจุดที่เราสนใจ เช่น ในตัวอย่างนี้ ถ้าเรานับได้ว่า จุดทศนิยม อยู่ตำแหน่งที่เท่าไหร่ของแต่ละจำนวนนั้นๆ ได้ เราก็ใช้คู่กับสูตร Left ให้นับตั้งแต่หลังจุดทศนิยมนั้นไปอีก 2 ตำแหน่งได้ครับ

SELECT Number.Number, InStr([Number],".") AS P, Left([Number],

+2) AS Ans
FROM [Number];


Back to Top
Reply by Message on : 20/8/2556 14:29:58
Saifar
(R16870)

Back to Top
Reply by Message on : 20/8/2556 15:59:53
Un
(R16872)
เยี่ยม
Back to Top
Reply by Message on : 20/8/2556 21:30:26
TTT
(R16873)
ใช้เป็นสูตรง่ายๆได้เลยครับ
ทศนิยม 1 ตำแหน่ง
= int( x * 10) / 10
ทศนิยม 2 ตำแหน่ง
= int( x * 100) / 100
ทศนิยม n ตำแหน่ง
= int( x * (10 ^ n)) / (10 ^ n)

เช่น
2.66666
int(2.66666 * 100) / 100
= 2.66
Back to Top
Reply by Message on : 21/8/2556 16:14:19
jantanee
(R16876)
ขอบคุณทุกท่านมากเลยค่ะ
ข้อมูลเป็นเเบบนี้นะค่ะ ฟิลด์ NetGPA มีค่า 1.500000
ผลจากการนำไปใช้นะค่ะ
1.ของคุณ Saifar มีปัญหาตรงหากจุดทศนิยมเป็น 0 จะไปไม่แสดงค่า 0 ค่ะ
ซึ่งการแสดง GPA จะต้องแสดงค่าด้วย เช่น 2.50 , 3.00 ค่ะ ซื่งจากต่อนแรกที่ใช้ Left เพียงอย่างเดียวก็มีปัญหานี้เช่นกัน
2. ของคุณ TTT ตอนแรกที่ใช้ GPA:(int([NetGPA]*100)/100) ค่าที่ได้เป็น 1.00 ค่ะ แต่พอปรับเป็น GPA:([NetGPA]*100)/100) ผลลัพธ์กลับเป็นไปตามที่ต้องการคือ 1.50
***อย่างทราบว่าเป็นเพราะอะไร หากไม่ใช้ INT แบบนี้ มีโอกาศจะ Error ในจุดอื่น ๆ หรือไม่ค่ะ
Back to Top
Reply by Message on : 21/8/2556 16:40:23
jantanee
(R16878)
พบปัญหาแบบนี้ค่ะ

Back to Top
Reply by Message on : 21/8/2556 17:28:03
TTT
(R16880)
ผมขออธิบายให้ฟังคร่าวๆนะครับ
จากสูตร int(2.66666*100)/100
1. นำ 2.66666 มาคูณกับ 100 เพื่อเลื่อนจุดทศนิยมไป 2 ตำแหน่ง
2.66666 * 100 ผลลัพธ์ 266.666
2. ใช้ฟังก์ชั่น int() ตัดจุดทศนิยมที่เหลือหลังการคูณด้วย 100 ออก
int(266.666) ผลลัพธ์ 266
3. นำผลลัพธ์ข้อ 2 มาหารด้วย 100 อีกที เพื่อให้เป็นค่าทศนิยมดังเดิม
266 / 100 ผลลัพธ์ 2.66

ฉนั้นในสูตร คุณต้องใช้ฟังก์ชั่น Int() ด้วยครับ โดยจะได้ดังนี้

GPA:(int([NetGPA]*100)/100)

แต่หากคุณต้องการให้แสดงค่าเลข 0 ด้วย ในกรณี 1.5 เป็น 1.50 ก็เพื่อฟังก์ชั่น Format() คล่อมเข้าไปอีกทีดังนี้:

GPA:Format((int([NetGPA]*100)/100), "0.00")

ประมาณนี้ครับ หวังว่าคงเข้าใจนะครับ
Back to Top
Reply by Message on : 21/8/2556 17:32:29
TTT
(R16881)
ปล. ดูวงเล็บให้ดีๆนะครับ มันหมายถึงการกระทำก่อนหลังของสูตร ในตัวอย่างที่คุณโพสมา คุณใส่วงเล็บผิดนะครับ
Back to Top
Reply by Message on : 22/8/2556 12:37:46
jantanee
(R16885)
อ้อ ...จริงด้วย
ขอบคุณมาก ๆ เลยนะค่ะ
ขอคำปรึกษาอะไรได้คุณ TTT ช่วยไว้ตลอดเลย

Back to Top
Reply by Message on : 22/8/2556 16:33:46
Saifar
(R16888)
หลังจุดทศนิยมเป็นศูนย์ ก็แสดงค่าได้นี่ครับ


Back to Top

 @ ประกาศใช้งานเว็บบอร์ดใหม่คลิกลิ้งได้ที่โลโก้ ไท.Access หรือกด --> บอร์ดเรียนรู้ Access สำหรับคนไทย 
                         โพสต์ถาม,ตอบที่บอร์ดใหม่ แล้วจะใส่ลิ้งอ้างมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ


Sorry, you can NOT post a reply.
+++ webboard source: ASPThai.Net Webboard 6.0 webbord +++++++ admin : yeadram +++