เมื่อเร็ว ๆ นี้เราได้ติดตั้งระบบที่ต้องการจัดการค่าในหลายสกุลเงินและทำการแปลงระหว่างพวกเขาและคิดหาวิธีบางอย่างที่ยาก
ไม่ใช้จุดลอยตัวเป็นจำนวนเงิน
การคำนวณเลขทศนิยมจะแนะนำสิ่งที่ไม่ถูกต้องซึ่งอาจไม่สังเกตจนกว่าพวกเขาจะทำอะไรผิดพลาด ค่าทั้งหมดควรเก็บไว้เป็นจำนวนเต็มหรือทศนิยมแบบคงที่และหากคุณเลือกใช้ทศนิยมแบบคงที่ให้แน่ใจว่าคุณเข้าใจว่าประเภทนั้นทำภายใต้ประทุนอย่างไร (เช่นใช้ภายในเป็นจำนวนเต็มหรือทศนิยม) พิมพ์)
เมื่อคุณต้องการคำนวณหรือแปลง:
- แปลงค่าเป็นทศนิยม
- คำนวณค่าใหม่
- ปัดเศษตัวเลขแล้วแปลงกลับเป็นจำนวนเต็ม
เมื่อแปลงหมายเลขทศนิยมกลับไปเป็นจำนวนเต็มในขั้นตอนที่ 3 อย่าเพิ่งโยนมัน - ใช้ฟังก์ชันคณิตศาสตร์เพื่อปัดเศษก่อน ซึ่งโดยปกติจะมีround
แต่ในกรณีพิเศษมันอาจจะเป็นหรือfloor
ceil
รู้ความแตกต่างและเลือกอย่างระมัดระวัง
เก็บประเภทของตัวเลขไว้ข้างๆค่า
สิ่งนี้อาจไม่สำคัญสำหรับคุณหากคุณจัดการเพียงหนึ่งสกุลเงิน แต่เป็นสิ่งสำคัญสำหรับเราในการจัดการหลายสกุลเงิน เราใช้รหัส 3 ตัวสำหรับสกุลเงินเช่น USD, GBP, JPY, EUR และอื่น ๆ
มันอาจจะมีประโยชน์ในการจัดเก็บ:
- ไม่ว่าจะเป็นจำนวนก่อนหรือหลังภาษี (และอัตราภาษีคืออะไร)
- ไม่ว่าจะเป็นจำนวนที่เป็นผลมาจากการแปลง (และสิ่งที่มันถูกแปลงจาก)
รู้ขอบเขตความแม่นยำของตัวเลขที่คุณติดต่อด้วย
สำหรับค่าจริงคุณต้องการแม่นยำเป็นหน่วยที่เล็กที่สุดของสกุลเงิน ซึ่งหมายความว่าคุณไม่มีค่าน้อยกว่าหนึ่งเซ็นต์เงินเยนเยนและอื่น ๆ อย่าเก็บค่าที่มีความแม่นยำสูงกว่านั้นโดยไม่มีเหตุผล
ภายในคุณอาจเลือกที่จะจัดการกับค่าที่น้อยกว่าซึ่งในกรณีนี้เป็นค่าสกุลเงินชนิดอื่น ตรวจสอบให้แน่ใจว่ารหัสของคุณรู้ว่าเป็นแบบใดและไม่ทำให้สับสน หลีกเลี่ยงการใช้ค่าทศนิยมแม้ที่นี่
การเพิ่มกฎเหล่านั้นทั้งหมดเข้าด้วยกันเราตัดสินใจตามกฎต่อไปนี้ ในการเรียกใช้รหัสสกุลเงินจะถูกเก็บไว้โดยใช้จำนวนเต็มสำหรับหน่วยที่เล็กที่สุด
class Currency {
String code; // eg "USD"
int value; // eg 2500
boolean converted;
}
class Price {
Currency grossValue;
Currency netValue;
Tax taxRate;
}
ในฐานข้อมูลค่าจะถูกเก็บเป็นสตริงในรูปแบบต่อไปนี้:
USD:2500
ที่เก็บค่าของ $ 25.00 เราสามารถทำได้เนื่องจากรหัสที่เกี่ยวข้องกับสกุลเงินไม่จำเป็นต้องอยู่ในเลเยอร์ฐานข้อมูลเท่านั้นดังนั้นค่าทั้งหมดสามารถแปลงเป็นหน่วยความจำก่อน สถานการณ์อื่น ๆ จะไม่มีข้อสงสัยยืมตัวเองเพื่อแก้ไขปัญหาอื่น ๆ
และในกรณีที่ฉันไม่ได้บอกชัดเจนก่อนหน้านี้อย่าใช้ทุ่น!