เมื่อวานฉันพยายามสำรวจด้วยตัวเองถึงพฤติกรรมของวิธี DecimalFormat .format() กับตัวยึดตำแหน่งทั้งหมดและสิ่งที่พวกเขาทำ
ดังนั้นฉันจึงเขียนตัวเลขสองตัวและลองใช้รูปแบบที่แตกต่างกัน ด้วย "#.##" เลขศูนย์ที่ไม่มีนัยสำคัญทั้งหมดถูกตัดออก และด้วย "0000.00" วิธีการจะเพิ่มเลขศูนย์นำหน้าตัวเลข ไม่เป็นไร แต่แล้วฉันก็ลองใช้รูปแบบแปลกๆ เพื่อดูว่าจะเกิดอะไรขึ้น
ด้วยรูปแบบ "33333.##" ผลลัพธ์สุดท้ายจึงแปลกมาก คุณสามารถเห็นรหัสของฉันด้านล่าง:
DecimalFormat df = new DecimalFormat("33332.##");
double a= 222.46705219;
double b=-102.000;
System.out.println(df.format(a));
System.out.println(df.format(b));
และผลลัพธ์ของมันคือ:
33332222,47
-33332102,0
อินพุตเหมือนกับตัวเลขแต่ใช้รูปแบบ "33033.##" ให้ผลลัพธ์:
33222,4732
33102
ฉันเข้าใจว่าโปรแกรมเพิ่มตัวเลขที่จัดรูปแบบไว้ที่ตำแหน่ง 0 แต่ทำไมเมื่อศูนย์ไม่แสดงเป็นตัวยึดตำแหน่ง วิธีการยังคงปัดเศษตัวเลขตัวแรกและ (ชัดเจน) ตัวเลขที่สอง
ทำไมตัวเลขแรกของฉันจึงถูกปัดเศษเป็นตัวเลขที่สอง หลักตามที่ควรจะเป็น แต่ตัวเลขตัวที่สอง (b) ถูกพิมพ์โดยมีเลขศูนย์ต่อท้าย?
และทำไมเมื่อตัวยึดตำแหน่ง 0 แสดงอยู่ตรงกลางของ "33033.##" โปรแกรมจึงแทรกตัวเลขที่จัดรูปแบบแล้ว a แทนที่ แต่ไม่พิมพ์ "33" ต่อท้ายหมายเลข b?
ฉันไม่รู้จะอธิบายพฤติกรรมนี้อย่างไร