Page 1 of 1

MOD หาเศษของผลหารให้ผลไม่ถูกต้องเสมอไปใช่มั๊ยครับ

Posted: Thu May 15, 2014 6:53 pm
by palerpater
MOD เป็นการหาเศษจากการหารตัวตั้งกับตัวหาร

ผมมี 3 คำถามนะครับคือ

1. MOD หาเศษของผลหารให้ผลไม่ถูกต้องเสมอไปใช่มั๊ยครับ mod(1,2) return ค่า 1 ซึ่งจริงๆ แล้ว ผลของการหาร 1/2 มีค่า 0.5 ดังนั้นเศษจึงต้องมีค่าเป็น 0.5 แต่สูตร return ค่า 1 มาให้

ซึ่งเมื่อผมลองแกล้งทดลอง excel โดยเอาสองมาคูณทั้งตัวตั้งและตัวหาร คือให้หาค่า mod(1*2,2*2) ซึ่งมันควรจะ return ค่าเหมือน mod(1,2) แต่ผลกลับเป็นว่ามัน return ค่า 2 มาให้แทน ซึ่งก็ยังผิดอยู่เหมือนเดิม

2. MOD ที่ใช้ใน excel version 2013 กับ 2007 หรือต่ำกว่า 2007 ก็ดัน return ค่ามาให้ไม่เท่ากัน

2013: mod(13536,9.4) = 9.4 ซึ่งจริงๆ แล้ว 13536/9.4 = 1440 ดังนั้นมันควรตอบ 0
2007: mod(13536,9.4) = 1.3074E-12 ดันไม่เป๊ะอีก ถ้าใส่สูตรเทียบค่าว่าเท่ากับ 0 หรือไม่ มันก็ตอบผิดอีก

3. มีวิธีการไหนจะตรวจสอบหาเศษจากการหารได้จริงๆ ถ้าไม่พึ่ง MOD (ที่ผมรู้สึกว่ามันพึ่งไม่ได้) บ้างหรือไม่ครับ

Re: MOD หาเศษของผลหารให้ผลไม่ถูกต้องเสมอไปใช่มั๊ยครับ

Posted: Thu May 15, 2014 7:40 pm
by palerpater
จริงๆ แล้วผมแค่อยากตรวจสอบผลหารว่าลงตัวหรือเปล่า ลองไปดูเวบอื่นเขาแนะนำ =int(A)=A เวิร์คจริงด้วย ฉลาดจริงๆ แต่ก็ยังสงสัยว่า MOD ไมมันมั่วได้ขนาดนี้ครับเนี่ย

Re: MOD หาเศษของผลหารให้ผลไม่ถูกต้องเสมอไปใช่มั๊ยครับ

Posted: Thu May 15, 2014 9:02 pm
by bank9597
:D ได้คำตอบแล้วใช่ไหมครับ

Re: MOD หาเศษของผลหารให้ผลไม่ถูกต้องเสมอไปใช่มั๊ยครับ

Posted: Fri May 16, 2014 2:29 am
by cruzz
อืมก็จริงแฮะ รอท่านกูรูมาให้ความกระจ่าง เพราะค่าอื่นที่ใกล้เคียงกันแสดงผลถูกต้อง
ยกเว้นกับค่า 13536 ที่แสดงผล MOD() ได้ 9.4 แต่ถ้าใส่สูตร n-d*INT(n/d) จะได้ 0
แปลกดีครับ

Re: MOD หาเศษของผลหารให้ผลไม่ถูกต้องเสมอไปใช่มั๊ยครับ

Posted: Fri May 16, 2014 11:06 am
by snasui
palerpater wrote:1. MOD หาเศษของผลหารให้ผลไม่ถูกต้องเสมอไปใช่มั๊ยครับ mod(1,2) return ค่า 1 ซึ่งจริงๆ แล้ว ผลของการหาร 1/2 มีค่า 0.5 ดังนั้นเศษจึงต้องมีค่าเป็น 0.5 แต่สูตร return ค่า 1 มาให้
:D Mod เป็นการหาเศษจากการหารเป็นจำนวนเท่า ซึ่งจำนวนเท่าต้องเป็นจำนวนเต็ม ตัวที่หารลงตัวจะเป็น 0 เสมอ หากว่าหารไม่ลงตัวในลักษณะจำนวนเต็ม ส่วนที่เหลือจากการหารลงตัวคือเศษจากการหาร จากกรณีนี้ Mod(1,2) ไม่ถือเป็นการหารลงตัว คำตอบ 0.5 (0.5 เท่า) โดยไม่มีทศนิยมต่อท้ายไม่เรียกว่าหารลงตัวสำหรับ Mod ครับ จากกรณีนี้ผลลัพธ์จะต้องได้ 1 โดย Mod(1,10) ผลลัพธ์คือ 1 เช่นกัน
palerpater wrote:ซึ่งเมื่อผมลองแกล้งทดลอง excel โดยเอาสองมาคูณทั้งตัวตั้งและตัวหาร คือให้หาค่า mod(1*2,2*2) ซึ่งมันควรจะ return ค่าเหมือน mod(1,2) แต่ผลกลับเป็นว่ามัน return ค่า 2 มาให้แทน ซึ่งก็ยังผิดอยู่เหมือนเดิม
กรณีนี้ก็เช่นเดียวกันกับวรรคบน Mod(1*2,2*2) คือ Mod(2,4) เลข 2 หารไม่ลงตัวในลักษณะจำนวนเท่าของ 4 เศษจากการหารจึงเป็น 2
palerpater wrote:2. MOD ที่ใช้ใน excel version 2013 กับ 2007 หรือต่ำกว่า 2007 ก็ดัน return ค่ามาให้ไม่เท่ากัน

2013: mod(13536,9.4) = 9.4 ซึ่งจริงๆ แล้ว 13536/9.4 = 1440 ดังนั้นมันควรตอบ 0
2007: mod(13536,9.4) = 1.3074E-12 ดันไม่เป๊ะอีก ถ้าใส่สูตรเทียบค่าว่าเท่ากับ 0 หรือไม่ มันก็ตอบผิดอีก
ปกติการใช้ Mod ตัว Divisor หรือตัวหารจะเป็นจำนวนเต็ม หากเป็นทศนิยมคำตอบที่ได้อาจจะไม่ตรงกับที่ต้องการ ทั้งนี้เนื่องจากโปรแกรมมีการแปลงค่าที่เราคีย์ซึ่งเป็นเลขฐาน 10 ให้เป็นเลขฐาน 2 แล้วนำไปคำนวณ จาก =MOD(13536,9.4) คำตอบคือ 9.39999999999949 ไม่ได้เป็นจำนวนเท่าของ 9.4 ดูตัวอย่างปัญหานี้ในกรณีอื่น ๆ ได้ที่ wordpress/difference-form-calculation/ สำหรับการ Mod ที่มี Divisor เป็นทศนิยมให้ใช้รูปแบบ Int (n - d*INT(n/d)) แทนครับ

กรณีที่มีความไม่สม่ำเสมอในผลลัพธ์ของแต่ละ Version เกิดขึ้นได้หลาย ๆ กรณี นอกจากกรณีนี้แล้ว อีกตัวอย่างคือ Datedif ซึ่งเกิดเนื่องจากมีการปรับระบบการคำนวณของ Excel เอง ที่ผ่านมามีการปรับความแม่นยำให้กับฟังก์ชั่นต่าง ๆ ใน Version ที่สูงขึ้นอยู่เสมอครับ