วิธีจัดรูปแบบตัวเลข 0..9 เพื่อแสดงด้วย 2 หลัก (ไม่ใช่วันที่)


215

ฉันต้องการแสดงตัวเลขต่ำกว่า 100 ด้วย 2 หลักเสมอ (ตัวอย่าง: 03, 05, 15 ... )

ฉันจะต่อท้าย 0 โดยไม่ใช้เงื่อนไขเพื่อตรวจสอบว่ามันต่ำกว่า 10 ได้อย่างไร?

ฉันต้องการผนวกผลลัพธ์ไปยัง String อื่นดังนั้นฉันจึงไม่สามารถใช้ printf

คำตอบ:


528

คุณสามารถใช้ได้:

String.format("%02d", myNumber)

ดูเพิ่มเติมที่javadocs


1
เกิดอะไรขึ้นถ้า myNumber เป็นสองเท่า
รา

3
@Fra แล้วคุณจะใช้String.format("%02.0f", myNumber)ถ้าคุณไม่ต้องการตัวเลขหลังจุดทศนิยม
beny23

สำหรับผู้ที่ต้องการอ่านโดยเฉพาะเกี่ยวกับไวยากรณ์รูปแบบสตริง: Format String Syntax
Pony

สิ่งนี้จะสร้างคำเตือน Android Linter "โดยปริยายโดยใช้โลแคลเริ่มต้นเป็นแหล่งที่พบบ่อยของบั๊ก: ใช้ String.format (โลแคล, ... ) แทน"
Christopher Stock

1
@ChristopherStock นั่นเป็นปัญหาที่แยกจากกันโดยสิ้นเชิงเกี่ยวกับการใช้ภาษาเริ่มต้นที่ถูกต้องของอุปกรณ์ที่แอพใช้งานอยู่ - คุณสามารถเพิกเฉยหรือแก้ไขได้ แต่เกี่ยวข้องกับ Android และตำแหน่งที่ตั้งเท่านั้น ไม่มีส่วนเกี่ยวข้องกับการจัดรูปแบบสตริงที่แท้จริง
Radu

55

หากคุณต้องการพิมพ์หมายเลขคุณสามารถใช้ printf

System.out.printf("%02d", num);

คุณสามารถใช้ได้

String.format("%02d", num);

หรือ

(num < 10 ? "0" : "") + num;

หรือ

(""+(100+num)).substring(1);

2
การใช้รูปแบบนั้นช้าที่สุด แต่ก็ชัดเจนและไม่น่าจะผิดไปเลย เช่นถ้า NUM เป็น -1 ;)
Peter Lawrey

42

คุณสามารถใช้สิ่งนี้:

NumberFormat formatter = new DecimalFormat("00");  
String s = formatter.format(1); // ----> 01

นี่ควรเป็นคำตอบที่ยอมรับได้! ผลลัพธ์ของการแก้ปัญหาผ่าน String.format อาจแตกต่างกันเนื่องจากการตั้งค่าสถานที่ (s. Android Linter Warning "โดยปริยายโดยใช้ภาษาเริ่มต้นเป็นแหล่งที่มาของข้อบกพร่อง: ใช้ String.format (Locale, ... ))
Christopher Stock

3

คลาส String มาพร้อมกับความสามารถในการจัดรูปแบบ:

System.out.println(String.format("%02d", 5));

สำหรับเอกสารฉบับเต็มนี่คือเอกสาร


มันบอกว่าjava.util.IllegalFormatConversionException: %d can't format java.lang.Double arguments
Pradeep Kumar Kushwaha

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