หน้า: [1]   ลงล่าง
ผู้เขียน หัวข้อ: ThaiMoney class รองรับ 999 ล้าน  (อ่าน 225 ครั้ง)
jirayu
Administrator
Full Member
*****

ความนิยม: +14/-0
กระทู้: 158


« เมื่อ: มกราคม 15, 2010, 10:29:11 AM »


   เผอิญลูกค้าออกบิลใบเดียวล่อไป 115 ล้าน ซึ่ง ThaiMoney class ไม่สามารถรองรับได้เลยแก้ให้มันได้
   ไหนๆก็ไหนๆ เลยเขียนเป็น Method อิสระอันเดียว เพื่อการแก้ง่าย  SayMoney.InThai(...)

   เร็วขึ้นกว่าเดิมเพราะจะตรวจความกว้างก่อน หารด้วย 1000 หรือ หมื่นหรือล้าน ขึ้นอยู่กับความยาว
   แล้วก็เลี่ยงการใช้ recursive  นำไปใช้ในโปรแกรมได้เลยครับ

   บิลสุดท้ายที่ลูกค้าออกคือ 312 ล้าน
แจ้งลบกระทู้นี้หรือติดต่อผู้ดูแล   บันทึกการเข้า

jirayu
Administrator
Full Member
*****

ความนิยม: +14/-0
กระทู้: 158


« ตอบ #1 เมื่อ: มกราคม 15, 2010, 10:48:08 AM »

Algorhythm การคิดเงินแบบรวดเร็ว  แบบไม่ตัดตำแหน่ง String


สมมุติว่าจำนวนเงิน   22135221

มากกว่าสิบล้านไหม
มากกว่า 22135221 Div 1000000 B = 22 ก็ได้ Level ล้าน
NextLevel 22135221-(1000000 * B)

มากกว่าล้านไหม
มากกว่า 2135221 Div 1000000 B = 2 ก็ได้ Level ล้าน
NextLevel = 2135221-(1000000 * B)

135221
มากกว่าแสนไหม
มากกว่า     135221 Div 100000 B = 1 ก็ได้ Level = แสน
NextLevel = 135200-(100000 * B)

35221
มากกว่าหมื่นไหม
มากกว่า  35221 Div 10000 B = 3 ก็ได้ Level หมื่น
NextLevel = 35200-(10000 * B)

5221
มากกว่าพันไหม
มากกว่า  5221 Div 1000 B = 5 ก็ได้ Level พัน
NextLevel = 5221-(1000 * B)
 
221
มากกว่าร้อยไหม
มากกว่า 221 Div 100 B = 2 ก็ได้ Level ร้อย
NextLevel = 221-(100 * B)

21
มากกว่าสิบไหม
มากกว่า 21 Div 10 B = 2 ก็ได้ Level สิบ
NextLevel = 21-(10*B)

1
เอาไปหาเลขตรงๆ


รูทีนบอกเงินหลักเดียว  และแทนค่าคำว่าเอ็ดและยี่ ณช่วงตำแหน่งใน String
อย่าไปหาการหารตั้งแต่ล้านหาความกว้างให้ดีๆก่อนจะได้หาร จากตำแหน่งที่ต้องการไปเลย
แจ้งลบกระทู้นี้หรือติดต่อผู้ดูแล   บันทึกการเข้า

magicstudent
Administrator
Hero Member
*****

ความนิยม: +2/-0
กระทู้: 718


เว็บไซต์
« ตอบ #2 เมื่อ: มกราคม 22, 2010, 01:04:13 PM »

ขอบคุณครับอาจารย์ แล้วจะหาลูกค้าที่ออกบิลถึง 1000 ล้านเจอบ้างใหมครับ อย่างผมเนี่ย 555
แจ้งลบกระทู้นี้หรือติดต่อผู้ดูแล   บันทึกการเข้า

Q-1
Administrator
Full Member
*****

ความนิยม: +0/-0
กระทู้: 142


« ตอบ #3 เมื่อ: กุมภาพันธ์ 01, 2010, 11:15:33 AM »

ขอบคุณคับ  ยิ้ม
แจ้งลบกระทู้นี้หรือติดต่อผู้ดูแล   บันทึกการเข้า

หน้า: [1]   ขึ้นบน
พิมพ์
กระโดดไป: