ขณะนี้ฉันใช้รหัสต่อไปนี้เพื่อพิมพ์สองครั้ง:
return String.format("%.2f", someDouble);
ใช้งานได้ดียกเว้น Java ใช้ตัวคั่นทศนิยมของ Locale (ลูกน้ำ) ในขณะที่ฉันต้องการใช้จุด มีวิธีง่ายๆในการทำเช่นนี้หรือไม่?
ขณะนี้ฉันใช้รหัสต่อไปนี้เพื่อพิมพ์สองครั้ง:
return String.format("%.2f", someDouble);
ใช้งานได้ดียกเว้น Java ใช้ตัวคั่นทศนิยมของ Locale (ลูกน้ำ) ในขณะที่ฉันต้องการใช้จุด มีวิธีง่ายๆในการทำเช่นนี้หรือไม่?
คำตอบ:
ใช้โอเวอร์โหลดString.format
ซึ่งช่วยให้คุณระบุโลแคล:
return String.format(Locale.ROOT, "%.2f", someDouble);
หากคุณกำลังเพียงการจัดรูปแบบตัวเลข - ในขณะที่คุณอยู่ที่นี่ - แล้วใช้NumberFormat
อาจจะเหมาะสมกว่า แต่ถ้าคุณต้องการความสามารถในการจัดรูปแบบที่เหลือString.format
ก็น่าจะใช้ได้
วิธีแก้ปัญหาที่รุนแรงกว่านั้นคือการตั้งค่า Locale ของคุณในช่วง main ()
ชอบ:
Locale.setDefault(new Locale("en", "US"));
คุณสามารถส่ง Locale เพิ่มเติมไปยัง java.lang.String.format เช่นเดียวกับ java.io.PrintStream.printf (เช่น System.out.printf ()):
import java.util.Locale;
public class PrintfLocales {
public static void main(String args[]) {
System.out.printf("%.2f: Default locale\n", 3.1415926535);
System.out.printf(Locale.GERMANY, "%.2f: Germany locale\n", 3.1415926535);
System.out.printf(Locale.US, "%.2f: US locale\n", 3.1415926535);
}
}
ผลลัพธ์ดังต่อไปนี้ (บนพีซีของฉัน):
$ java PrintfLocales
3.14: Default locale
3,14: Germany locale
3.14: US locale
โปรดดูString.formatใน Java API
out.printf((Locale)null, ...)
หรือout.format((Locale)null, ...)
เพื่อรับการแสดงที่เป็นอิสระจากโลแคล (และยังมีLocale.ROOT
)
สายเกินไป แต่อย่างที่กล่าวถึงในที่นี้คือตัวอย่างการใช้งานNumberFormat
(และคลาสย่อยDecimalFormat
)
public static String format(double num) {
DecimalFormatSymbols decimalSymbols = DecimalFormatSymbols.getInstance();
decimalSymbols.setDecimalSeparator('.');
return new DecimalFormat("0.00", decimalSymbols).format(num);
}
DecimalFormatSymbols
และตั้งค่าตัวคั่นควรทำครั้งเดียวก่อนวิธีนี้
คุณสามารถใช้ NumberFormat และ DecimalFormat
ลองดูลิงค์นี้จาก Java Tutorials LocaleSpecific Formatting
ส่วนที่มีชื่อว่า Locale-Sensitive Formatting คือสิ่งที่คุณต้องการ
ฉันมีปัญหาเดียวกัน .. 55.1
เปลี่ยนเป็น55,10
. การแก้ไขอย่างรวดเร็ว (สกปรก?) ของฉันคือ:
String.format("%.2f", value).replaceAll(",",".");