มีการแสดงข้อมูลเดียวที่ทำงานกับทุกสกุลเงิน (แม้จะแตกต่างจากสกุลเงินดอลลาร์ยูโรและปอนด์)


12

ฉันสามารถค้นหาคำถามมากมายเกี่ยวกับห้องสมุดเพื่อใช้แทนจำนวนเงินในบางสกุลเงิน และเกี่ยวกับปัญหาเรื่องอายุว่าทำไมคุณไม่ควรเก็บสกุลเงินเป็นเลขทศนิยม IEEE 754 แต่ฉันไม่สามารถหาอะไรเพิ่มเติมได้ แน่นอนว่ายังมีอะไรอีกมากให้รู้เกี่ยวกับสกุลเงินในการใช้งานจริง ฉันสนใจเป็นพิเศษในสิ่งที่คุณจำเป็นต้องรู้เพื่อนำเสนอในการใช้งานจริง (เช่นด้วยดอลลาร์คุณไม่มีความแม่นยำน้อยกว่า $ 0.01 ซึ่งอนุญาตให้แสดงเป็นจำนวนเต็มเซ็นต์)

แต่มันยากที่จะตั้งสมมติฐานเกี่ยวกับความหลากหลายของโปรแกรมของคุณเมื่อสกุลเงินเดียวที่คุณรู้จักคือสกุลเงินตะวันตกที่เป็นที่นิยม (เช่นดอลลาร์ยูโรและปอนด์) อะไรคือความรู้ที่เกี่ยวข้องในมุมมองเชิงโปรแกรมอย่างหมดจด? ฉันไม่ได้กังวลเกี่ยวกับหัวข้อของการแปลง

โดยเฉพาะอย่างยิ่งเราต้องรู้อะไรบ้างเพื่อให้สามารถเก็บค่าในสกุลเงินบางส่วนและพิมพ์ออกมาได้


2
โปรแกรมเมอร์บางคนไม่ทำงานในอุตสาหกรรมที่จัดการกับจำนวนเงิน
whatsisname

4
โอ้แน่นอน แต่สามารถพูดได้เกือบทุกอย่าง ฉันคิดว่าเราสามารถสันนิษฐานได้ว่าผู้ที่พบว่าคำถามนี้มีประโยชน์จะเป็นผู้ที่ทำงานกับสกุลเงิน
Kat

5
ฉันทำงานด้านการพัฒนามากมายสำหรับธนาคารและ บริษัท ที่ให้บริการทางการเงินอื่น ๆ ในนิวยอร์ค และฉันรับประกันได้เลยว่าคุณไม่มีคำตอบแบบ "ปิด" สำหรับคำถามของคุณ คุณอาจถามว่า "ฉันต้องรู้คณิตศาสตร์มากแค่ไหน" ตัวอย่างเช่นย้อนกลับไปในปี 1990 ราคาหุ้นเปลี่ยนจากแปดและ 256 เป็นทศนิยม ใครจะเดาได้ว่าจะเกิดอะไรขึ้น คุณต้องเข้าใจว่าธุรกิจของคุณสนับสนุนแอปพลิเคชันของคุณอย่างไรและจะแสดงข้อมูลได้ดีที่สุดอย่างไร (ในสกุลเงินกรณีนี้) เพื่อรองรับความต้องการทางธุรกิจเหล่านั้น
John Forkosh

4
0.02 ของฉัน: ราคาเป็นสิ่งหนึ่ง สกุลเงินอื่น
Machado

3
ฉันคิดว่าโอ้ต้องมีตัวหารร่วมสำหรับทุกสกุลเงิน แต่อาจจะไม่ สเตอร์ลิงเพนนีอยู่ในช่วง 1⁄100 ปอนด์ แต่อยู่ที่ 1⁄240 ปอนด์ ดังนั้นคุณไม่เพียง แต่มีส่วนของ 1/240 แต่คุณมีวันที่สลับไปมาและอาจเป็นอัตราแลกเปลี่ยนสำหรับเพนนีเก่าที่ยังไม่ได้เปลี่ยน en.wikipedia.org/wiki/Penny_sterling อย่าให้ฉันเริ่มต้นบน cowry shells! en.wikipedia.org/wiki/Shell_moneyหรือความจริงที่ว่าเงินต้องการความเชื่อที่จะกลายเป็นจริง: en.wikipedia.org/wiki/Money คำถามที่ดีแม้ว่ามันจะไม่เหมาะกับ StackExchange ก็ตาม!
GlenPeterson

คำตอบ:


24

เช่นกับดอลลาร์คุณจะไม่มีความแม่นยำน้อยกว่า $ 0.01

โอ้จริงเหรอ? ป้อนคำอธิบายรูปภาพที่นี่

อายุที่มากขึ้นว่าทำไมคุณไม่ควรเก็บสกุลเงินเป็นเลขทศนิยม IEEE 754

ป้อนคำอธิบายรูปภาพที่นี่

โปรดอย่าลังเลที่จะเก็บนิ้วในIEEE 754 ตัวเลขทศนิยม พวกเขาจัดเก็บอย่างแม่นยำตามที่คุณคาดหวัง

โปรดเก็บจำนวนเงินใด ๆ ในหมายเลขทศนิยมของIEEE 754ที่คุณสามารถจัดเก็บได้โดยใช้เห็บที่แบ่งไม้บรรทัดออกเป็นเสี้ยวนิ้ว

ทำไม? เพราะเมื่อคุณใช้IEEE 754นั่นเป็นวิธีที่คุณเก็บไว้

สิ่งที่เกี่ยวกับนิ้วคือพวกเขาแบ่งครึ่ง สิ่งที่เกี่ยวกับสกุลเงินส่วนใหญ่คือพวกมันถูกแบ่งออกเป็นสิบส่วน

ความแตกต่างนี้จะไม่เกิดความสับสนยกเว้นว่าสำหรับภาษาการเขียนโปรแกรมส่วนใหญ่อินพุตและเอาต์พุตจากตัวเลขทศนิยมIEEE 754จะแสดงเป็นทศนิยม! ซึ่งแปลกมากเพราะพวกเขาไม่ได้ถูกเก็บไว้ในตำแหน่งทศนิยม

ด้วยเหตุนี้คุณไม่เคยได้เห็นวิธีการบิตทำสิ่งแปลก0.1เมื่อคุณถามคอมพิวเตอร์ในการจัดเก็บ คุณจะเห็นความแปลกประหลาดเมื่อคุณทำคณิตศาสตร์กับมันและมีข้อผิดพลาดแปลก ๆ

จากจาวาที่มีประสิทธิภาพของ Josh Bloch :

System.out.println(1.03 - .42);

ผลิต 0.6100000000000001

สิ่งที่คนส่วนใหญ่บอกเกี่ยวกับสิ่งนี้ไม่ใช่1วิธีนั่งอยู่ตรงนั้นทางด้านขวา มันเป็นตัวเลขประหลาดที่ต้องใช้เพื่อให้ได้มา แทนที่จะใช้ตัวอย่างที่เป็นที่นิยมที่สุด0.1เราต้องใช้ตัวอย่างที่แสดงปัญหาและหลีกเลี่ยงการปัดเศษที่จะซ่อนมัน

ตัวอย่างเช่นเหตุใดจึงใช้งานได้

System.out.println(.01 - .02);

ผลิต -0.01

เพราะเราโชคดี

ฉันเกลียดปัญหาที่วินิจฉัยยากเพราะบางครั้งฉันก็ "โชคดี"

IEEE 754ไม่สามารถเก็บได้อย่างแม่นยำ 0.1 แต่ถ้าคุณขอให้เก็บ 0.1 แล้วขอให้พิมพ์มันจะแสดง 0.1 และคุณจะคิดว่าทุกอย่างเรียบร้อยดี มันไม่ดี แต่คุณไม่สามารถเห็นได้ว่ามันเป็นการปัดเศษเพื่อกลับไปที่ 0.1

บางคนสร้างความสับสนให้กับคนอื่นโดยเรียกความคลาดเคลื่อนเหล่านี้มาปัดเศษข้อผิดพลาด ไม่ข้อผิดพลาดเหล่านี้ไม่ใช่การปัดเศษ การปัดเศษกำลังทำสิ่งที่ควรจะเป็นและเปลี่ยนสิ่งที่ไม่ใช่ทศนิยมให้เป็นทศนิยมเพื่อให้สามารถพิมพ์บนหน้าจอได้

แต่สิ่งนี้จะซ่อนความไม่ตรงกันระหว่างวิธีแสดงหมายเลขและวิธีจัดเก็บ ข้อผิดพลาดจะไม่เกิดขึ้นเมื่อมีการปัดเศษ มันเกิดขึ้นเมื่อคุณตัดสินใจที่จะใส่ตัวเลขลงในระบบที่ไม่สามารถจัดเก็บได้อย่างแม่นยำและคิดว่ามันถูกเก็บไว้อย่างแม่นยำเมื่อมันไม่ได้เป็น

ไม่มีใครคาดว่า store จะจัดเก็บไว้อย่างแม่นยำในเครื่องคิดเลขและพวกเขาก็สามารถทำงานได้ด้วยดี ดังนั้นปัญหาไม่ได้เกี่ยวกับความแม่นยำ มันเกี่ยวกับความแม่นยำที่คาดหวัง คอมพิวเตอร์แสดงหนึ่งในสิบเช่น0.1เดียวกับเครื่องคิดเลขของเราดังนั้นเราคาดว่าพวกเขาจะเก็บหนึ่งในสิบอย่างสมบูรณ์แบบที่เครื่องคิดเลขของเราทำ พวกเขาทำไม่ได้ ซึ่งน่าแปลกใจเนื่องจากคอมพิวเตอร์มีราคาแพงกว่า

ผมขอแสดงความไม่ตรงกันให้คุณดู:

ป้อนคำอธิบายรูปภาพที่นี่

สังเกตเห็นว่า 1/2 และ 0.5 เข้ากันได้อย่างสมบูรณ์ แต่ 0.1 ไม่ได้เข้าแถว แน่นอนว่าคุณสามารถเข้าใกล้มากขึ้นถ้าคุณหารด้วย 2 ต่อไป แต่คุณจะไม่ตีมันแน่นอน และเราต้องการบิตเพิ่มมากขึ้นทุกครั้งที่เราหารด้วย 2 ดังนั้นการแทน 0.1 ด้วยระบบใด ๆ ที่หารด้วย 2 ต้องการจำนวนบิตไม่ จำกัด ฮาร์ดไดรฟ์ของฉันไม่ใหญ่มาก

ดังนั้นIEEE 754หยุดพยายามเมื่อมันหมดบิต ซึ่งเป็นสิ่งที่ดีเพราะฉันต้องการห้องบนฮาร์ดไดรฟ์สำหรับ ... รูปถ่ายครอบครัว ไม่มีจริงๆ. ภาพถ่ายครอบครัว : P

อย่างไรก็ตามสิ่งที่คุณพิมพ์และสิ่งที่คุณเห็นคือทศนิยม (ด้านขวา) แต่สิ่งที่คุณจัดเก็บคือจักรยาน (ทางซ้าย) บางครั้งก็เหมือนกันอย่างสมบูรณ์แบบ บางครั้งพวกเขาไม่ได้ บางครั้งดูเหมือนว่าพวกเขาเหมือนกันเมื่อพวกเขาไม่ได้ นั่นคือการปัดเศษ

โดยเฉพาะอย่างยิ่งเราต้องรู้อะไรบ้างเพื่อให้สามารถเก็บค่าในบางสกุลเงินและพิมพ์ออกมาได้

กรุณาถ้าคุณจัดการเงินตามทศนิยมของฉันอย่าใช้ทุ่นหรือดับเบิล

หากคุณแน่ใจว่าสิ่งต่างๆเช่นเศษสิบของเพนนีจะไม่เกี่ยวข้องก็ให้เก็บเงินไว้ หากคุณไม่ได้คิดออกว่าหน่วยที่เล็กที่สุดของสกุลเงินนี้จะเป็นเท่าไหร่และใช้หน่วยนั้น ถ้าคุณไม่สามารถใช้สิ่งที่ต้องการBigDecimal

มูลค่าสุทธิของฉันอาจจะพอดีกับจำนวนเต็ม 64 บิตเสมอ แต่สิ่งต่าง ๆ เช่นBigIntegerทำงานได้ดีสำหรับโครงการที่ใหญ่กว่านั้น พวกมันช้ากว่าประเภทพื้นเมือง

การหาวิธีจัดเก็บเป็นเพียงครึ่งหนึ่งของปัญหา จำไว้ว่าคุณต้องแสดงมันด้วย การออกแบบที่ดีจะแยกสองสิ่งนี้ออกจากกัน ปัญหาที่แท้จริงของการใช้โฟลทที่นี่คือสองสิ่งที่ถูกรุมด้วยกัน

ป้อนคำอธิบายรูปภาพที่นี่


6
ฉันไม่ได้มองหาคำอธิบายว่าทำไม IEEE 754 จึงไม่ได้ผล ฉันพูดถึง OP ว่าสิ่งนี้ได้รับการอธิบายอย่างดีในที่อื่น ในทำนองเดียวกันมีเหตุผลที่ฉันใช้คำว่า "การใช้ทางกายภาพ" อาจเป็นเพราะในขณะที่ราคาก๊าซมูลค่าตลาดหลักทรัพย์ ฯลฯ อาจมีความแม่นยำตามอำเภอใจเงินทางกายภาพ (และการทำธุรกรรมของผู้ใช้จำนวนมาก) ไม่ผ่านสถานที่นับร้อย เงินทางกายภาพ) ข้อมูลชิ้นหนึ่งที่ฉันสงสัยว่ามีสกุลเงินที่เข้าสู่ทศนิยมมากกว่านี้หรือไม่
Kat

3
"ความแปลกประหลาด" ของจุดลอยตัวนั้นไม่ได้ จำกัด เพียงแค่ครึ่งเดียวกับ 1 / 10thness ของ กว้างยาว "จุดลอย" ในชื่อทำให้บางครั้งผลลัพธ์ที่ไม่คาดคิด
whatsisname

6
ก่อนที่จะทำการเปลี่ยนแปลงสกุลเงินสกุลเงินของสหราชอาณาจักรคือปอนด์ชิลลิงและเพนนี (£ sd) โดยมี£ 1 == 20s, 1s = 12d ดังนั้น£ 1 = 240d ดังนั้น 1d 240d ดังนั้น 1d = 0.0046666666666 .. ดังนั้นจึงไม่สามารถแสดงเป็นทศนิยมได้ ก่อนที่จะเข้าร่วมยูโรยูโรลีร่าของอิตาลีมียอด 2346.4 (ในปี 2544) เป็นเงินดอลลาร์สหรัฐดังนั้นบางครั้งราคาเงินเดือนและค่าบ้านก็พุ่งแตะระดับสูงสุดที่แน่นอน
Steve Barnes

2
ฉันจะเถียง / ชี้ให้เห็นว่าสกุลเงินเป็นสิ่งหนึ่งและราคาเป็นอีกเรื่องหนึ่ง คุณสามารถมีความแม่นยำมากกว่า $ 0.01 ในราคา แต่คุณไม่สามารถจ่ายได้อย่างมีประสิทธิภาพด้วยความแม่นยำนั้น
Machado

1
นอกจากนี้ภาพถ่ายครอบครัว Pft :)
Machado

10

ฉันสามารถค้นหาคำถามมากมายเกี่ยวกับห้องสมุดเพื่อใช้แทนจำนวนเงินในบางสกุลเงิน

"ไลบรารี" ไม่จำเป็นเว้นแต่ว่าไลบรารีมาตรฐานของภาษาของคุณจะขาดข้อมูลบางประเภทอย่างที่ฉันจะอธิบาย

แน่นอนว่ายังมีอะไรอีกมากให้รู้เกี่ยวกับสกุลเงินในการใช้งานจริง ฉันสนใจเป็นพิเศษในสิ่งที่คุณจำเป็นต้องรู้เพื่อเป็นตัวแทนในการใช้งานจริง (เช่นด้วยดอลลาร์คุณไม่มีความแม่นยำน้อยกว่า $ 0.01 ซึ่งอนุญาตให้แสดงเป็นจำนวนเต็มเซ็นต์)

ค่อนข้างง่าย, คุณจำเป็นต้องคงทศนิยมจุดไม่ลอยทศนิยมจุด ตัวอย่างเช่นคลาสBigDecimalของ Java สามารถใช้เพื่อเก็บจำนวนเงิน ภาษาที่ทันสมัยอื่น ๆ ได้ประเภทที่คล้ายกันในตัวรวมทั้งC #และงูหลาม การปรับใช้จะแตกต่างกันไป แต่โดยทั่วไปแล้วจะเก็บตัวเลขเป็นจำนวนเต็มโดยมีตำแหน่งทศนิยมเป็นสมาชิกข้อมูลแยกต่างหาก สิ่งนี้ให้ความแม่นยำที่แน่นอนแม้ว่าจะทำการคำนวณทางคณิตศาสตร์ที่จะให้เศษที่เหลืออยู่ (เช่น 0.0000001) ด้วยหมายเลขทศนิยมของ IEEE

โดยเฉพาะอย่างยิ่งเราต้องรู้อะไรบ้างเพื่อให้สามารถเก็บค่าในบางสกุลเงินและพิมพ์ออกมาได้

มีจุดสำคัญอยู่สองสามข้อ

  1. ใช้ทศนิยมชนิดจริงแทนที่จะเป็นทศนิยม

  2. เข้าใจว่าจำนวนเงินในสกุลเงินมีสององค์ประกอบ: ค่า (5.63) และรหัสสกุลเงินหรือประเภท (USD, CAD, GBP, EUR, et al) บางครั้งคุณสามารถละเว้นรหัสสกุลเงินบางครั้งก็สำคัญ ถ้าคุณกำลังทำงานกับระบบการเงินหรือค้าปลีก / อีคอมเมิร์ซที่อนุญาตให้ใช้หลายสกุลเงิน จะเกิดอะไรขึ้นหากคุณพยายามที่จะรับเงินจากลูกค้าใน CAD แต่พวกเขาต้องการชำระเงินด้วย MXN คุณต้องพิมพ์ "เงิน" ด้วยรหัสสกุลเงินและจำนวนสกุลเงินเพื่อที่จะสามารถผสมค่าเหล่านี้ (เช่นอัตราแลกเปลี่ยน แต่ฉันไม่ต้องการไปไกลเกินไปแทนเจนต์) ในเวลาเดียวกันซอฟต์แวร์การเงินส่วนบุคคลของฉันไม่จำเป็นต้องกังวลเกี่ยวกับเรื่องนี้เพราะทุกอย่างเป็นสกุลเงินดอลลาร์สหรัฐ ( สามารถผสมสกุลเงิน แต่ฉันไม่จำเป็นต้อง)

  3. ในขณะที่สกุลเงินอาจมีหน่วยทางกายภาพที่เล็กที่สุดในทางปฏิบัติ (CAD และ USD มีเซ็นต์ แต่ JPY เป็นเพียง ... เยน) เป็นไปได้ที่จะมีขนาดเล็กลง คำตอบของ CandiedOrange ชี้ให้เห็นว่าราคาน้ำมันเป็นสิบในสิบของราคา ภาษีทรัพย์สินของฉันได้รับการประเมินว่าเป็นโรงงานต่อดอลลาร์หรือหนึ่งในสิบของมูลค่า (1/1000 ของดอลลาร์สหรัฐ) อย่า จำกัด ตัวเองไว้ที่ $ 0.01 แม้ว่าคุณจะสามารถแสดงค่าเหล่านั้นได้เกือบตลอดเวลา แต่ประเภทของคุณควรอนุญาตให้เล็กลง (ประเภททศนิยมที่อ้างถึงข้างต้น)

  4. การคำนวณระดับกลางอย่างแน่นอนจะต้องมีความแม่นยำมากกว่าหนึ่งเซ็นต์ ฉันทำงานกับระบบค้าปลีก / อีคอมเมิร์ซที่มีการปัดค่าภายในเป็น $ 0.00000001 ภายใน โดยทั่วไปความแม่นยำไม่ จำกัด ไม่สนับสนุนตามประเภททศนิยม (หรือ SQL) ดังนั้นจึงต้องมีข้อ จำกัด ตัวอย่างเช่นการหาร 1/3 โดยใช้ BigDecimal ของ Java จะทำให้เกิดข้อยกเว้นโดยไม่มีการระบุ RoundingMode หรือ MathContext เนื่องจากค่าไม่สามารถแสดงได้อย่างแม่นยำ

    อย่างไรก็ตามนี่เป็นสิ่งสำคัญในบางกรณี ให้เราสมมติว่าคุณมีผู้ใช้ที่มีหกรายการในตะกร้าสินค้าของเขาและเขาไปตรวจสอบ ระบบของคุณต้องคำนวณภาษีและทำรายการต่อเนื่องจากรายการอาจมีการเก็บภาษีแตกต่างกัน หากคุณปัดเศษภาษีในแต่ละรายการคุณอาจได้รับข้อผิดพลาดในการปัดเศษเพนนีที่ระดับธุรกรรม / รถเข็น วิธีหนึ่งในการแก้ไขปัญหานี้อาจเป็นการเก็บภาษีไปยังตำแหน่งทศนิยมเพิ่มเติมต่อรายการรับผลรวมสำหรับธุรกรรมทั้งหมดและย้อนกลับและปัดเศษแต่ละรายการเพื่อให้ภาษีทั้งหมดถูกต้อง (อาจเป็นหนึ่งรอบรายการขึ้นอีกรายการหนึ่ง)

สิ่งสำคัญที่ต้องตระหนักถึงทั้งหมดนี้คือสิ่งที่มีความสำคัญเช่นเดียวกับการปัดเศษเพนนีนั้นมีความสำคัญต่อคนที่เหมาะสม (เช่นลูกค้าในอดีตของฉันบางคนที่ต้องจ่ายภาษีการขายของรัฐบาลในนามของลูกค้า) อย่างไรก็ตามสิ่งเหล่านี้ล้วนเป็นปัญหาที่แก้ไขแล้ว จดจำประเด็นข้างต้นและทำการทดลองด้วยตัวเองและคุณจะได้เรียนรู้ด้วยการทำ


ในวันที่ 2 ฉันคิดว่าอัตราแลกเปลี่ยนนั้นเพียงพอที่จะได้รับอย่างน้อยจำนวนของตัวเอง คุณต้องพิจารณาว่าอัตราการเปลี่ยนแปลงในช่วงเวลาซึ่งมีวิธีการจัดการที่แตกต่างกันสองสาม
Izkata

2
+1 นอกจากนี้สกุลเงินจะเปลี่ยนแปลงตลอดเวลา ในบราซิลเรามีการเปลี่ยนแปลงสกุลเงินในช่วง 80 และ 90 ซ้ำหลายครั้งโดยตัดศูนย์และเปลี่ยนสกุลเงินเมื่อจำเป็นเนื่องจากอัตราเงินเฟ้อที่อยู่เหนือการควบคุม นั่นหมายความว่าทุกแง่มุมของสกุลเงินอาจเปลี่ยนแปลงได้ตลอดเวลา
Machado

@ อิซกะตะอย่างแน่นอนฉันได้ทำงานกับระบบที่เปลี่ยนสกุลเงิน ฉันต้องการที่จะสัมผัสกับหัวข้อที่เกี่ยวข้อง อย่างไรก็ตามนั่นไม่ได้เป็นจุดสนใจของคำถามและฉันอาจพิมพ์คำตอบอื่นได้ตราบใดที่คำถามนี้เกี่ยวกับการแลกเปลี่ยนสกุลเงิน

'' ไลบรารี 'ไม่จำเป็นเว้นแต่ว่าไลบรารีมาตรฐานของภาษาของคุณจะขาดข้อมูลบางประเภทอย่างที่ฉันจะอธิบาย' สกุลเงินสามารถมีครึ่งหนึ่งในสี่ส่วนหนึ่งส่วนแปดส่วนแปดและอื่น ๆ ซึ่งหมายความว่าอย่างน้อยเราก็ต้องการทศนิยมแทน แต่เราแน่ใจอย่างสมบูรณ์หรือไม่ว่าไม่มีสกุลเงินที่มีชิ้นส่วน 1/3 ของทั้งหมด?
Daniel McLaury

4

ที่เดียวที่นักพัฒนาจำนวนมากต้องเผชิญกับการแสดงข้อมูลเดียวสำหรับสกุลเงินใด ๆ สำหรับการซื้อในแอพสำหรับแอปพลิเคชัน iOS ลูกค้าของคุณสามารถเชื่อมต่อกับร้านค้าในเกือบทุกประเทศทั่วโลก และในสถานการณ์นั้นคุณจะได้รับราคาซื้อซึ่งประกอบด้วยตัวเลขความแม่นยำสองเท่าและรหัสสกุลเงิน

คุณต้องระวังว่าตัวเลขอาจใหญ่ มีสกุลเงินที่เทียบเท่าพูดสิบดอลลาร์เป็นมากกว่า 100,000 หน่วย และเราโชคดีที่ไม่มีสกุลเงินเช่นดอลลาร์ซิมบับเวในขณะนี้ซึ่งคุณสามารถมีธนบัตรได้ถึงหนึ่งร้อยล้านล้านเหรียญ!

สำหรับการแสดงสกุลเงินคุณจะต้องมีห้องสมุด - คุณไม่มีโอกาสได้รับสิทธิ์ทั้งหมด การแสดงผลขึ้นอยู่กับสองสิ่ง: รหัสสกุลเงินและสถานที่ของผู้ใช้ คิดว่าเงินดอลลาร์สหรัฐและเงินดอลลาร์แคนาดาจะแสดงด้วยสถานที่ตั้งของสหรัฐอเมริกาและสถานที่ตั้งของแคนาดาได้อย่างไร: ในสหรัฐอเมริกาคุณมี $ vs CAN $ และในแคนาดาคุณมี US $ กับ $ หวังว่ามันจะถูกสร้างขึ้นในระบบปฏิบัติการหรือคุณมีห้องสมุดที่ดี

สำหรับการคำนวณการคำนวณใด ๆ จะสิ้นสุดด้วยขั้นตอนการปัดเศษ คุณจะต้องไปหาวิธีการที่คุณต้องดำเนินการที่ปัดเศษถูกต้องตามกฎหมาย นั่นไม่ใช่ปัญหาการเขียนโปรแกรม แต่เป็นปัญหาทางกฎหมาย ตัวอย่างเช่นหากคุณคำนวณ VAT ในสหราชอาณาจักรคุณจะต้องคำนวณภาษีต่อรายการหรือต่อบรรทัดรายการและปัดเศษเป็นเพนนี สิ่งที่คุณปัดขึ้นอยู่กับสกุลเงิน แต่กฎระเบียบที่ชัดเจนขึ้นอยู่กับประเทศ คุณไม่สามารถคาดหวังได้ว่าการคำนวณที่ถูกต้องตามกฎหมายในสหราชอาณาจักรจะถูกต้องตามกฎหมายในญี่ปุ่นและในทางกลับกัน


0

โดยเฉพาะอย่างยิ่งเราต้องรู้อะไรบ้างเพื่อให้สามารถเก็บค่าในสกุลเงินบางส่วนและพิมพ์ออกมาได้

  • "เพื่อจัดเก็บค่า" : ชนิดข้อมูลตัวเลขคงที่และประเภทสกุลเงิน ฉันคิดว่าสิ่งเหล่านี้ค่อนข้างชัดเจน การจัดเก็บไปยังหมายเลขที่ไม่ใช่จุดตายตัวอาจเกี่ยวข้องกับการปัดเศษและเปลี่ยนค่า การคำนวณสกุลเงินจะเป็นปัญหาที่แตกต่าง
  • "เพื่อพิมพ์ออกมา" : ตำแหน่งที่ตั้งของผู้ใช้ หากคุณโชคดีคุณจะได้ห้องสมุดมาตรฐานที่จะทำทุกอย่างเช่นสัญลักษณ์สกุลเงินตัวคั่นหลักพันตัวคั่นทศนิยมความแม่นยำเป็นต้น

ตัวอย่างปัญหาที่เกี่ยวข้องกับสถานที่:

  • 100 USD ในสถานที่ของสหรัฐอเมริกาควร $ 100.00 ในสถานที่อื่นที่มีจุดเป็นตัวคั่นทศนิยมจะเป็น US $ 100.00
  • บางประเทศใช้จำนวนนับพันแทนจำนวนกลุ่มเช่นแทนที่จะเป็น 10,000.00 มันก็แค่ 1,0000.00
  • ด้วยเหตุผลเชิงปฏิบัติผู้คนไม่พิมพ์ตัวเลขทั้งหมดสำหรับสกุลเงินขนาดเล็กเช่นแทนที่จะเป็น $ 1,000,000,000.00 พวกเขาแค่ต้องการให้คุณพิมพ์ $ 1 พันล้าน

ปัญหาที่เป็นไปได้อีกอย่างหนึ่งคือแม้ว่าคุณจะเก็บสกุลเงินอย่างถูกต้องในหมายเลขจุดคงที่มันอาจจำเป็นต้องถูกแปลงเป็นเลขทศนิยมเนื่องจากไลบรารีที่ใช้สำหรับการพิมพ์สนับสนุนเฉพาะจุดลอยตัว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.