พอดีเจอปัญหาในงาน เกี่ยวกับการปัดเศษ เลยไปศึกษาเพิ่ม ได้ความรู้เป็นข้อๆดังนี้
ปัญหาที่เจอ
1) ทำไมค่าเสื่อมราคา คำนวนถูกบ้าง ผิดบ้าง
วิธีแก้
1) อย่าใช้ข้อมูลประเภท Float หรือ Real ไปผ่านเข้าไปในฟังก์ชั่น Round เนื่องจาก
ข้อมูลประเภท Float หรือ Real วิธีเก็บจริงๆ มันจะไม่ได้เก็บค่าแท้จริง(Exac Numeric) แต่จะเก็บเป็นค่าประมาณ(Approximate Numeric)
ตัวอย่างเช่น 2.25 จริงๆแล้ว จะเก็บ 2.2499999999... แทน
นั่น ทำให้เกิดปัญหาว่า ถ้าเราปัดเศษโดยใช้หลัก round off (ต่ำกว่า 5 ปัดลง มากกว่าเท่ากับ5 ขึ้นไปปัดขึ้น)
ฟังก์ชั่นจะมองว่า 2.249999999 นั้นมีค่าน้อยกว่า 5 ดังนั้นฟังก์ชั่นจะปดลง เหลือ 2.2 แทนที่จะเป็น 2.3
แก้ยังไง ก็คือ อย่าใช้ตัวแปรประเภท Float หรือ Real แต่ให้ไปใช้พวก Decimal แทนครับ (อาจจะระบุเป็น Decimal(22,6) อะไรก็ว่าไป)
วันพฤหัสบดีที่ 29 กรกฎาคม พ.ศ. 2553
สมัครสมาชิก:
ส่งความคิดเห็น (Atom)
How To Implement Custom Rounding Procedures
ตอบลบลิงค์นี้ดี
http://support.microsoft.com/default.aspx?scid=kb;en-us;196652