הצגת סכומי כסף במילים

1. סקירה כללית

במדריך זה נראה כיצד נוכל להמיר סכום כספי לייצוג מילים בג'אווה.

נראה גם כיצד יישום מותאם אישית יכול להיראות באמצעות ספרייה חיצונית - Tradukisto.

2. יישום

נתחיל תחילה עם היישום שלנו. הצעד הראשון הוא להכריז על שניים חוּט מערכים עם האלמנטים הבאים:

מחרוזת סטטית ציבורית [] ones = {"", "one", "two", "three", "four", "five", "six", "seven", "eight", "תשעה", "עשר" , "אחת עשרה", "שתים עשרה", "שלוש עשרה", "ארבע עשרה", "חמש עשרה", "שש עשרה", "שבע עשרה", "שמונה עשרה", "תשע עשרה"}; מחרוזת סטטית ציבורית [] tens = {"", // 0 "", // 1 "עשרים", // 2 "שלושים", // 3 "ארבעים", // 4 "חמישים", // 5 "שישים ", // 6" שבעים ", // 7" שמונים ", // 8" תשעים "// 9};

כאשר אנו מקבלים קלט, נצטרך לטפל בערכים הלא חוקיים (אפס וערכים שליליים). לאחר קבלת קלט חוקי, אנו יכולים לחלץ את מספר הדולרים והסנטים למשתנים:

 דולרים ארוכים = (ארוך) כסף; סנטים ארוכים = Math.round ((כסף - דולר) * 100);

אם המספר שניתן הוא פחות מ -20, נקבל את המתאים יחידות' אלמנט מהמערך המבוסס על האינדקס:

אם (n <20) {להחזיר [[int] n]; }

נשתמש בגישה דומה למספרים פחות מ -100, אך כעת עלינו להשתמש עשרות מערך גם כן:

אם (n <100) {להחזיר עשרות [(int) n / 10] + ((n% 10! = 0)? "": "") + ones [(int) n% 10]; }

אנו עושים זאת באופן דומה למספרים שהם פחות מאלף.

לאחר מכן אנו משתמשים בשיחות רקורסיביות כדי להתמודד עם מספרים הנמוכים ממיליון, כפי שמוצג להלן:

אם (n <1_000_000) {להחזיר להמיר (n / 1000) + "אלף" + ((n% 1000! = 0)? "": "") + להמיר (n% 1000); }

אותה גישה משמשת למספרים שהם פחות ממיליארד וכו '.

הנה השיטה העיקרית שניתן לקרוא לה לבצע המרה זו:

 מחרוזת סטטית ציבורית getMoneyIntoWords (כסף כפול) {דולרים ארוכים = כסף (ארוך); סנטים ארוכים = Math.round ((כסף - דולר) * 100); אם (כסף == 0 ד) {החזר ""; } אם (כסף 0) {dollarsPart = להמיר (דולרים) + "דולר" + (דולרים == 1? "": "s"); } מחרוזת centsPart = ""; אם (סנטים> 0) {אם (dollarParts.length ()> 0) {centsPart = "ו-"; } centsPart + = להמיר (סנט) + "סנט" + (סנט == 1? "": "s"); } להחזיר דולרים חלק + סנט חלק; }

בואו לבדוק את הקוד שלנו כדי לוודא שהוא עובד:

@ מבחן ציבורי בטל כאשר GivenDollarsAndCents_thenReturnWords () {String expectResult = "תשע מאות עשרים וארבעה דולר ושישים סנט"; assertEquals (expectResult, NumberWordConverter.getMoneyIntoWords (924.6)); } @ מבחן ציבורי בטל כאשר TwoBillionDollarsGiven_thenReturnWords () {String expectResult = "שני מיליארד מאה שלושים ושלושה מיליון מאתיים" + "ארבעים ושבע אלף שמונה מאות ועשרה דולר"; assertEquals (expectResult, NumberWordConverter.getMoneyIntoWords (2_133_247_810)); } @Test הציבור בטל כאשרThirtyMillionDollarsGiven_thenReturnWords () {String expectResult = "שלושים ושלושה מיליון ושלוש מאות ארבעים ושמונה אלף תשע מאות שבעים ושמונה דולר"; assertEquals (expectResult, NumberWordConverter.getMoneyIntoWords (33_348_978)); }

בואו ונבדוק גם כמה מקרי קצה, ונוודא שגם כיסינו אותם:

@ מבחן ציבורי בטל כאשר ZeroDollarsGiven_thenReturnEmptyString () {assertEquals ("", NumberWordConverter.getMoneyIntoWords (0)); } @ מבחן ציבורי בטל כאשר NoDollarsAndNineFiveNineCents_thenCorrectRounding () {assertEquals ("תשעים ושש סנט", NumberWordConverter.getMoneyIntoWords (0.959)); } @Test הציבור בטל כאשר NoDollarsAndOneCent_thenReturnCentSingular () {assertEquals ("סנט אחד", NumberWordConverter.getMoneyIntoWords (0.01)); } 

3. שימוש בספרייה

כעת, לאחר שהטמענו אלגוריתם משלנו, בואו נעשה המרה זו באמצעות ספרייה קיימת.

טראדוקיסטו היא ספרייה עבור Java 8+, שיכולה לעזור לנו להמיר מספרים לייצוגי המילים שלהם. ראשית, עלינו לייבא אותו לפרויקט שלנו (הגרסה האחרונה של הספרייה נמצאת כאן):

 pl.allegro.finance tradukisto 1.0.1 

כעת אנו יכולים להשתמש ממירי כסףשל asWords () שיטה לבצע המרה זו:

מחרוזת ציבורית getMoneyIntoWords (קלט מחרוזת) {ממיר MoneyConverters = MoneyConverters.ENGLISH_BANKING_MONEY_VALUE; להחזיר converter.asWords (BigDecimal חדש (קלט)); }

בואו לבדוק את השיטה הזו עם מקרה מבחן פשוט:

@Test הציבור בטל כאשר GivenDollarsAndCents_thenReturnWordsVersionTwo () {assertEquals ("שלוש מאות עשר £ 00/100", NumberWordConverter.getMoneyIntoWords ("310")); }

נוכל להשתמש בספריית ICU4J לשם כך, אך היא גדולה ומגיעה עם תכונות רבות אחרות שאינן מתחום מאמר זה.

עם זאת, בדוק את זה אם יש צורך בתמיכה ב- Unicode וגלובליזציה.

4. מסקנה

במאמר מהיר זה ראינו שתי גישות כיצד לבצע המרה של סכום כסף למילים.

הקוד לכל הדוגמאות המוסברות כאן, ועוד ניתן למצוא באתר GitHub.


$config[zx-auto] not found$config[zx-overlay] not found