วิธีที่ดีที่สุดในการจัดรูปแบบหมายเลขต่อไปนี้ที่มอบให้ฉันเป็นสตริงคืออะไร
String number = "1000500000.574" //assume my value will always be a String
ฉันต้องการให้เป็นสตริงที่มีค่า: 1,000,500,000.57
ฉันจะจัดรูปแบบเป็นเช่นนี้ได้อย่างไร
วิธีที่ดีที่สุดในการจัดรูปแบบหมายเลขต่อไปนี้ที่มอบให้ฉันเป็นสตริงคืออะไร
String number = "1000500000.574" //assume my value will always be a String
ฉันต้องการให้เป็นสตริงที่มีค่า: 1,000,500,000.57
ฉันจะจัดรูปแบบเป็นเช่นนี้ได้อย่างไร
คำตอบ:
คุณอาจต้องการดูDecimalFormat
ชั้นเรียน สนับสนุนสถานที่ต่าง ๆ (เช่น: ในบางประเทศที่จะได้รับการจัดรูปแบบ1.000.500.000,57
แทน)
คุณต้องแปลงสตริงนั้นเป็นตัวเลขซึ่งสามารถทำได้ด้วย:
double amount = Double.parseDouble(number);
ตัวอย่างโค้ด:
String number = "1000500000.574";
double amount = Double.parseDouble(number);
DecimalFormat formatter = new DecimalFormat("#,###.00");
System.out.println(formatter.format(amount));
สิ่งนี้สามารถทำได้โดยใช้ String.format () ซึ่งอาจจะง่ายกว่าและ / หรือยืดหยุ่นกว่าถ้าคุณกำลังจัดรูปแบบตัวเลขจำนวนมากในสตริงเดียว
String number = "1000500000.574";
Double numParsed = Double.parseDouble(number);
System.out.println(String.format("The input number is: %,.2f", numParsed));
// Or
String numString = String.format("%,.2f", numParsed);
สำหรับสตริงรูปแบบ "% ,. 2f" - "," หมายถึงแยกกลุ่มตัวเลขด้วยเครื่องหมายจุลภาคและ ".2" หมายถึงสถานที่สองรอบหลังจากทศนิยม
สำหรับการอ้างอิงเกี่ยวกับตัวเลือกการจัดรูปแบบอื่น ๆ โปรดดูที่https://docs.oracle.com/javase/tutorial/java/data/numberformat.html
เมื่อคุณแปลงสตริงเป็นตัวเลขคุณสามารถใช้
// format the number for the default locale
NumberFormat.getInstance().format(num)
หรือ
// format the number for a particular locale
NumberFormat.getInstance(locale).format(num)
new DecimalFormat("0.##", DecimalFormatSymbols.getInstance(locale))
เนื่องจากนี่คือผลลัพธ์อันดับหนึ่งของ Google format number commas java
นี่คือคำตอบที่เหมาะสำหรับผู้ที่ทำงานกับตัวเลขทั้งหมดและไม่สนใจทศนิยม
String.format("%,d", 2000000)
เอาท์พุท:
2,000,000
ฉันสร้างยูทิลิตี้การจัดรูปแบบของฉันเอง ซึ่งรวดเร็วในการประมวลผลการจัดรูปแบบพร้อมกับคุณสมบัติมากมาย :)
มันรองรับ:
รหัสที่สามารถพบได้ที่นี่ คุณเรียกว่าแบบนี้:
public static void main(String[])
{
int settings = ValueFormat.COMMAS | ValueFormat.PRECISION(2) | ValueFormat.MILLIONS;
String formatted = ValueFormat.format(1234567, settings);
}
ฉันควรชี้ให้เห็นว่าสิ่งนี้ไม่รองรับการสนับสนุนทศนิยม แต่มีประโยชน์มากสำหรับค่าจำนวนเต็ม ตัวอย่างข้างต้นจะแสดง "1.23M" เป็นเอาต์พุต ฉันอาจจะเพิ่มการสนับสนุนทศนิยมบางที แต่ไม่เห็นใช้มากเกินไปสำหรับมันตั้งแต่นั้นมาฉันอาจรวมสิ่งนี้เข้ากับประเภท BigInteger ของคลาสที่จัดการอาร์เรย์ char [] ที่บีบอัดสำหรับการคำนวณทางคณิตศาสตร์
K
หรือM
หมายถึง
public void convert(int s)
{
System.out.println(NumberFormat.getNumberInstance(Locale.US).format(s));
}
public static void main(String args[])
{
LocalEx n=new LocalEx();
n.convert(10000);
}
คุณยังสามารถใช้วิธีแก้ปัญหาด้านล่าง -
public static String getRoundOffValue(double value){
DecimalFormat df = new DecimalFormat("##,##,##,##,##,##,##0.00");
return df.format(value);
}
คุณสามารถทำการแปลงทั้งหมดในหนึ่งบรรทัดโดยใช้รหัสต่อไปนี้:
String number = "1000500000.574";
String convertedString = new DecimalFormat("#,###.##").format(Double.parseDouble(number));
เครื่องหมาย # สองอันสุดท้ายในตัวสร้าง DecimalFormat สามารถเป็น 0 ได้เช่นกัน ทั้งสองวิธีใช้งานได้
คำตอบแรกใช้ได้ดีมาก แต่สำหรับ ZERO / 0 จะจัดรูปแบบเป็น. 00
ดังนั้นรูปแบบ #, ## 0.00 ทำงานได้ดีสำหรับฉัน ทดสอบตัวเลขที่แตกต่างกันเสมอเช่น 0/100 / 2334.30 และตัวเลขลบก่อนปรับใช้กับระบบการผลิต
นี่เป็นวิธีที่ง่ายที่สุดในการเดินทาง:
String number = "10987655.876";
double result = Double.parseDouble(number);
System.out.println(String.format("%,.2f",result));
ผลลัพธ์: 10,987,655.88