ฉันได้รับรหัสมรดกจำนวนมากที่เขียนด้วย PHP บนฐานข้อมูล MySQL สิ่งที่ฉันสังเกตคือแอพพลิเคชั่นใช้doubles
สำหรับจัดเก็บและจัดการข้อมูล
ตอนนี้ฉันเจอโพสต์มากมายที่กล่าวถึงวิธีdouble
ที่ไม่เหมาะสำหรับการดำเนินงานทางการเงินเนื่องจากข้อผิดพลาดในการปัดเศษ อย่างไรก็ตามฉันยังไม่ได้เจอวิธีแก้ปัญหาที่สมบูรณ์เกี่ยวกับวิธีจัดการค่าเงินในโค้ด PHP และเก็บไว้ในฐานข้อมูล MySQL
มีวิธีปฏิบัติที่ดีที่สุดเมื่อต้องจัดการกับเงินใน PHP โดยเฉพาะหรือไม่?
สิ่งที่ฉันกำลังมองหาคือ:
- ข้อมูลควรถูกเก็บไว้ในฐานข้อมูลอย่างไร? ประเภทคอลัมน์? ขนาด?
- ข้อมูลควรจะถูกจัดการอย่างไรในการบวกและการลบแบบปกติ การคูณหรือหาร?
- เมื่อใดที่ฉันควรปัดเศษค่า การปัดเศษเท่าไหร่ที่ยอมรับได้ถ้ามี?
- มีความแตกต่างระหว่างการจัดการกับค่าเงินขนาดใหญ่และค่าต่ำหรือไม่?
หมายเหตุ: มากง่ายโค้ดตัวอย่างของวิธีการที่ฉันอาจพบค่าเงินในชีวิตประจำวัน (กังวลด้านความปลอดภัยต่าง ๆ ถูกละเลยทำให้เข้าใจง่ายแน่นอนในชีวิตจริงฉันไม่เคยจะใช้รหัสของฉันเช่นนี้.)
$a= $_POST['price_in_dollars']; //-->(ex: 25.06) will be read as a string should it be cast to double?
$b= $_POST['discount_rate'];//-->(ex: 0.35) value will always be less than 1
$valueToBeStored= $a * $b; //--> any hint here is welcomed
$valueFromDatabase= $row['price']; //--> price column in database could be double, decimal,...etc.
$priceToPrint=$valueFromDatabase * 0.25; //again cast needed or not?
ฉันหวังว่าคุณจะใช้โค้ดตัวอย่างนี้เป็นวิธีในการดึงกรณีการใช้งานออกมามากขึ้นและแน่นอนว่าจะไม่ใช้มันอย่างแท้จริง
คำถามโบนัส หากฉันจะใช้ ORM เช่น Doctrine หรือ PROPEL จะใช้เงินในรหัสของฉันแตกต่างกันอย่างไร
decimal
ประเภทใน C # มีความแม่นยำ จำกัด แต่เหมาะสำหรับค่าเงิน