להמיר כפול למחרוזת, הסרת מקומות עשרוניים

1. הקדמה

במדריך זה, נסתכל על ה- דרכים שונות להמיר לְהַכפִּיל ערך ל- a חוּט, הסרת המקומות העשרוניים שלו.

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

2. קטיעה באמצעות יציקה

אם שלנו לְהַכפִּיל הערך הוא בתוך ה- int טווח, אנחנו יכולים להשליך אותו ל- int. צוות השחקנים קוצר את החלק העשרוני, כלומר הוא מנתק אותו מבלי לעשות שום עיגול.

גישה זו מהירה פי 10 מהגישות האחרות שנבחן.

ברגע שזה int, ואז נוכל להעביר את זה ל ערך של שיטהעל חוּט מעמד:

מחרוזת קטומה = String.valueOf ((int) doubleValue);

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

3. עיגול באמצעות String.format ()

כעת, הגישות הנותרות אינן מוגבלות כמו ליהוק, אך יש להן ניואנסים משלהן.

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

מחרוזת מעוגלת = String.format ("%. 0f", doubleValue);

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

ובעוד פשוט, מחרוזת.פורמט היא הדרך האיטית ביותר לעשות זאת.

4. שימוש NumberFormat.format ()

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

ה setMaximumFractionDigits () השיטה מספרת למעצב כמה ספרות חלקיות אחרי הנקודה העשרונית לכלול בפלט:

NumberFormat nf = NumberFormat.getNumberInstance (); nf.setMaximumFractionDigits (0); מחרוזת מעוגלת = nf.format (doubleValue);

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

בזמן HALF_EVEN מועיל בניתוחים סטטיסטיים, בואו נשתמש HALF_UP להיות עקבי:

nf.setRoundingMode (RoundingMode.HALF_UP); מחרוזת מעוגלת = nf.format (doubleValue);

וגם אנו יכולים לשנות זאת ולהשיג קטיעה על ידי הגדרת המעצב לשימוש ב- קוֹמָה במקום עיגול במקום:

nf.setRoundingMode (RoundingMode.FLOOR); מחרוזת קטומה = nf.format (doubleValue)

ועכשיו, זה ייחתך במקום עגול.

5. שימוש DecimalFormat.format ()

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

DecimalFormat df = DecimalFormat חדש ("#, ###"); df.setRoundingMode (RoundingMode.HALF_UP); מחרוזת מעוגלת = df.format (doubleValue);

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

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

df.setRoundingMode (RoundingMode.FLOOR); מחרוזת קטומה = df.format (doubleValue)

6. שימוש BigDecimal.toString ()

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

אנחנו יכולים להשתמש BigDecimalשל setScale שיטה כדי לדעת אם אנחנו רוצים לעגל או לקטוע:

כפול largeDouble = 345_345_345_345.56; BigDecimal big = BigDecimal חדש (largeDouble); big = big.setScale (0, RoundingMode.HALF_UP);

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

ואז, אנחנו פשוט מתקשרים BigDecimalשל toString:

מחרוזת מעוגלת = big.toString ();

7. מסקנה

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

כרגיל, הדוגמאות והמדדים זמינים ב- GitHub.