עיצוב מספרים בג'אווה

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

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

2. עיצוב מספרים בסיסי עם פורמט # מחרוזת

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

ערך כפול = 4.2352989244d; assertThat (String.format ("%. 2f", value)). isEqualTo ("4.24"); assertThat (String.format ("%. 3f", value)). isEqualTo ("4.235");

3. עיצוב עשרוני על ידי עיגול

בג'אווה יש לנו שני סוגים פרימיטיביים המייצגים מספרים עשרונייםלָצוּף ו נקודה:

כפול myDouble = 7.8723d; צף myFloat = 7.8723f;

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

3.1. באמצעות BigDecimal לעיצוב מספרים

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

כפול סטטי ציבורי withBigDecimal (ערך כפול, int int) {BigDecimal bigDecimal = BigDecimal חדש (ערך); bigDecimal = bigDecimal.setScale (מקומות, RoundingMode.HALF_UP); להחזיר bigDecimal.doubleValue (); }

אנו מתחילים במופע חדש של BigDecimal עם הערך העשרוני המקורי שלנו. לאחר מכן, על ידי הגדרת הסולם, אנו מספקים את מספר המקומות העשרוניים שאנו רוצים ואיך אנו רוצים לעגל את המספר שלנו. שימוש בשיטה זו מאפשר לנו לעצב בקלות א לְהַכפִּיל ערך:

כפול D = 4.2352989244d; assertThat (withBigDecimal (D, 2)). isEqualTo (4.24); assertThat (withBigDecimal (D, 3)). isEqualTo (4.235);

3.2. באמצעות מתמטיקה # עגולה

אנו יכולים גם לנצל את השיטות הסטטיות ב- מתמטיקה כיתה לסיבוב א לְהַכפִּיל ערך למקום עשרוני שצוין. במקרה זה, אנו יכולים התאם את מספר המקומות העשרוניים על ידי הכפלת ואחר כך חלקי 10 ^ נ. בואו לבדוק את שיטת העוזר שלנו:

כפול סטטי ציבורי withMathRound (ערך כפול, int מקומות) {סולם כפול = Math.pow (10, מקומות); להחזיר Math.round (ערך * סולם) / סולם; }
assertThat (withMathRound (D, 2)). isEqualTo (4.24); assertThat (withMathRound (D, 3)). isEqualTo (4.235);

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

זה בגלל ש מתמטיקה # עגולה קוצר את הערך. בואו נראה איך זה יכול לקרות:

System.out.println (withMathRound (1000.0d, 17)); // נותן: 92.23372036854776 !! System.out.println (withMathRound (260.775d, 2)); // נותן: 260.77 במקום הצפוי 260.78 

וכך, השיטה רשומה רק למטרות למידה.

4. עיצוב סוגים שונים של מספרים

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

4.1. עיצוב שלמים גדולים עם פסיקים

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

מחרוזת סטטית ציבורית עםLargeIntegers (ערך כפול) {DecimalFormat df = DecimalFormat חדש ("###, ###, ###"); החזר df.format (ערך); ערך int = 123456789; assertThat (withLargeIntegers (value)). isEqualTo ("123,456,789");

4.2. ריפוד מספר

במקרים מסוימים, נרצה לרפד מספר עם אפסים לאורך שצוין. כאן נוכל להשתמש ב- פורמט # מחרוזת שיטה, כמתואר קודם:

מחרוזת סטטית ציבורית byPaddingZeros (ערך int, int paddingLength) {return String.format ("% 0" + paddingLength + "d", value); ערך int = 1; assertThat (byPaddingOutZeros (ערך, 3)). isEqualTo ("001");

4.3. עיצוב מספרים עם שני אפסים אחרי העשרוני

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

כפול סטטי ציבורי withTwoDecimalPlaces (ערך כפול) {DecimalFormat df = DecimalFormat חדש ("#. 00"); להחזיר כפול חדש (df.format (value)); ערך int = 12; assertThat (withTwoDecimalPlaces (value)). isEqualTo (12.00);

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

4.4. עיצוב ואחוזים

מפעם לפעם אולי נצטרך להציג אחוזים.

במקרה זה, אנו יכולים להשתמש ב- מספר פורמט #getPercentInstance שיטה. שיטה זו מאפשרת לנו לספק א אזור להדפסת הערך בפורמט המתאים למדינה שציינת:

מחרוזת סטטית ציבורית forPercentages (ערך כפול, אזור מקום) {NumberFormat nf = NumberFormat.getPercentInstance (locale); החזר nf.format (ערך); } ערך כפול = 25f / 100f; assertThat (forPercentages (ערך, אזור חדש ("en", "US"))). isEqualTo ("25%");

4.5. עיצוב מספר מטבע

דרך נפוצה לאחסן מטבעות ביישום שלנו היא באמצעות BigDecimal. מה אם נרצה להציג אותם בפני המשתמש? במקרה זה, אנו יכולים להשתמש ב- מספר פורמט מעמד:

מטבע מחרוזת סטטי ציבוריWithChosenLocalisation (ערך כפול, אזור מקומי) {NumberFormat nf = NumberFormat.getCurrencyInstance (locale); החזר nf.format (ערך); }

אנו מקבלים את מופע המטבע עבור נתון אזור ואז פשוט להתקשר ל פוּרמָט שיטה עם הערך. התוצאה היא המספר המוצג כמטבע עבור המדינה שצוינה:

ערך כפול = 23_500; assertThat (currencyWithChosenLocalisation (ערך, אזור חדש ("en", "US"))). isEqualTo ("$ 23,500.00"); assertThat (currencyWithChosenLocalisation (ערך, אזור חדש ("zh", "CN"))). isEqualTo (",5 23,500.00"); assertThat (currencyWithChosenLocalisation (ערך, אזור חדש ("pl", "PL"))). isEqualTo ("23 500 zł");

5. מקרי עיצוב מתקדמים

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

כפול סטטי ציבורי עםDecimalFormatLocal (ערך כפול) {DecimalFormat df = (DecimalFormat) NumberFormat.getNumberInstance (Locale.getDefault ()); להחזיר כפול חדש (df.format (value)); }

סוג העיצוב שלנו יקבל את הגדרת ברירת המחדל עבור לוקליזציה נתונה.

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

כפול D = 4.2352989244d; assertThat (withDecimalFormatLocal (D)). isEqualTo (4.235);

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

כפול סטטי ציבורי עםDecimalFormatPattern (ערך כפול, int מקומות) {DecimalFormat df2 = DecimalFormat חדש ("#, ###, ###, ## 0.00"); DecimalFormat df3 = DecimalFormat חדש ("#, ###, ###, ## 0.000"); אם (מקומות == 2) להחזיר כפול חדש (df2.format (ערך)); אחרת אם (מקומות == 3) להחזיר כפול חדש (df3.format (ערך)); אחרת לזרוק IllegalArgumentException (); } assertThat (withDecimalFormatPattern (D, 2)). isEqualTo (4.24); assertThat (withDecimalFormatPattern (D, 3)). isEqualTo (4.235);

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

6. מסקנה

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

כמו תמיד, הקוד עבור דוגמאות אלה זמין ב- GitHub.