สรุปอีกทีตามที่ผมเข้าใจนะครับ
ในสมการนี้ถ้าให้ปัดให้เต็มจำนวนอื่น ๆ ได้ด้วยที่ไม่ใช่ 100 อย่าง 50 เช่น 1348 -> 1350
สมการเต็ม ๆ น่าจะเขียนว่า
(A + (AB / 100)) + (C - ((A + (AB / 100)) % 100)) = Z
ให้ D = (A + (AB / 100)) จะได้ว่า
D + (C - (D % C)) = Z
D + C - (D % C) = Z
การเขียนโปรแกรมเราให้ x%y แทนเป็น x - (y * floor(x/y)) ได้
อย่างภาษา c เขียนแทน x%y ได้ว่า x-y*(int)(x/y) เอาไว้เขียนเล่นครับจริง ๆ ใช้ x%y ดีอยู่แล้ว
เอาไปแทนลงในสมการจะได้ว่า
D + C - (D - C floor(D / C)) = Z
D + C - D + C floor(D / C) = Z
C + C floor(D / C) = Z
แทน D กลับลงในสมการ
C + C floor((A + (AB / 100)) / C) = Z
ในที่นี้ใช้ C = 100 จึงได้ว่า
100 + 100 floor((A + (AB / 100)) / 100) = Z --- ได้ตรงกับท่าน marknary เลยครับ 100+(Floor[(A+(AB/100))/100])*100
นำมาจัดอีกหน่อยได้ว่า
100 + 100 floor((100A + AB) / 10000) = Z
100 + 100 floor(A(100 + B) / 10000) = Z
100 + 100 * (int)(A * (100 + B) / 10000) = Z
หรือแบบสั้น ๆ ก็แบบท่าน marknary อีกนั่นแหละครับ
Ceil[(A+(AB/100))/100])]*100 = Z
100 ceil((100A + AB) / 10000) = Z
100 ceil(A(100 + B) / 10000) = Z
แต่สรุปกันจริง ๆ แล้วแม้จะเปลี่ยนเป็นสมการใหม่ แต่ O ไม่ได้เปลี่ยนไปมากนักครับ
ถ้าสร้าง table ใหม่ขึ้นมาเก็บค่าไว้ แล้วพอ update ค่าก็ update ตาม ๆ กันอาจจะดีกว่าครับ (ตามที่ท่านอื่น ๆ ว่าไว้)
