ฉันสามารถทำมันได้System.out.print
หรือไม่
ฉันสามารถทำมันได้System.out.print
หรือไม่
คำตอบ:
คุณสามารถใช้printf
วิธีการดังนี้:
System.out.printf("%.2f", val);
กล่าวโดยย่อคือ%.2f
ไวยากรณ์บอกให้ Java คืนค่าตัวแปรของคุณ ( val
) พร้อมทศนิยม 2 ตำแหน่ง ( .2
) แทนทศนิยมของตัวเลขทศนิยม ( f
) จากจุดเริ่มต้นของตัวระบุรูปแบบ ( %
)
มีอักขระแปลงอื่น ๆ ที่คุณสามารถใช้นอกเหนือจากf
:
d
: จำนวนเต็มทศนิยมo
: จำนวนเต็มฐานแปดe
: floating-point ในเอกสารทางวิทยาศาสตร์Locale.FRANCE
ล่ะ
Locale.US
ไปไกลเกินไป หากคุณจำเป็นต้องยากรหัสสถานที่เกิดเหตุ "เป็นกลาง" สำหรับกรณีพับ, การแสดงผลจำนวน ฯลฯ Locale.ROOT
ระบุ สิ่งนี้จะเหมาะสมกับข้อความที่โปรแกรมอื่นจะใช้แทนการแสดงผลสำหรับผู้ใช้ที่เป็นมนุษย์ สำหรับข้อความที่แสดงต่อผู้ใช้ให้เกียรติสถานที่ของพวกเขาไม่ว่าพวกเขาจะระบุไว้อย่างชัดเจนหรือเป็นค่าเริ่มต้น
DecimalFormat
คุณสามารถใช้ วิธีหนึ่งในการใช้:
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
System.out.println(df.format(decimalNumber));
อีกหนึ่งคือการสร้างโดยใช้#.##
รูปแบบ
ฉันพบว่าตัวเลือกการจัดรูปแบบทั้งหมดสามารถอ่านได้น้อยกว่าการเรียกวิธีการจัดรูปแบบ แต่นั่นเป็นเรื่องของการตั้งค่า
System.out.printf("%.2f", value)
ไวยากรณ์ มันยังอยู่หรือเปล่า?
DecimalFormat
คำตอบฉันคิดว่าฉันผิด แต่ขอบคุณที่ให้ความกระจ่าง
df.setMinimumFractionDigits(2);
เพื่อบังคับสองหลัก
ฉันขอแนะนำให้ใช้String.format ()หากคุณต้องการค่าตามที่String
ในรหัสของคุณ
ตัวอย่างเช่นคุณสามารถใช้String.format()
วิธีดังต่อไปนี้:
float myFloat = 2.001f;
String formattedString = String.format("%.02f", myFloat);
float f = 102.236569f;
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsF = Float.valueOf(decimalFormat.format(f)); // output is 102.24
float floatValue=22.34555f;
System.out.print(String.format("%.2f", floatValue));
ผลผลิตคือ 22.35 หากคุณต้องการทศนิยม 3 ตำแหน่งให้เปลี่ยนเป็น "% .3f"
DecimalFormat
หลายคนได้กล่าวถึง แต่คุณสามารถใช้printf
หากคุณมี Java เวอร์ชันล่าสุด:
System.out.printf("%1.2f", 3.14159D);
ดูเอกสารในฟอร์แมตสำหรับข้อมูลเพิ่มเติมเกี่ยวกับรูปแบบของสตริง printf
เคล็ดลับง่ายๆคือการสร้างตัวแปรที่สั้นกว่าของคุณโดยการคูณด้วยเช่น100
การปัดเศษและหารด้วย100.0
อีกครั้ง วิธีนี้คุณสร้างตัวแปรโดยมีทศนิยม 2 ตำแหน่ง :
double new_variable = Math.round(old_variable*100) / 100.0;
"เคล็ดลับราคาถูก" นี้ดีพอสำหรับฉันและทำงานได้ในทุกภาษา (ฉันไม่ใช่คน Java เพียงแค่เรียนรู้)
คุณสามารถใช้รหัสด่วนด้านล่างนี้ซึ่งเปลี่ยนแปลงตัวเองในตอนท้าย เพิ่มจำนวนศูนย์ตามที่อ้างถึงหลังจากจุด
float y1 = 0.123456789;
DecimalFormat df = new DecimalFormat("#.00");
y1 = Float.valueOf(df.format(y1));
ตัวแปร y1 เท่ากับ0.123456789ก่อนหน้า หลังจากรหัสมันกลายเป็น0.12เท่านั้น
นี่คือตัวอย่างจากบทช่วยสอน:
DecimalFormat myFormatter = new DecimalFormat(pattern);
String output = myFormatter.format(value);
System.out.println(value + " " + pattern + " " + output);
หากคุณเลือกรูปแบบเช่น "###. ##" คุณจะได้ทศนิยมสองตำแหน่งและฉันคิดว่าค่าจะถูกปัดเศษขึ้น คุณจะต้องมองไปที่ลิงค์เพื่อให้ได้รูปแบบที่แน่นอนที่คุณต้องการ (เช่นไม่ว่าคุณต้องการเป็นศูนย์ต่อท้าย)
ด้านล่างเป็นรหัสวิธีที่คุณสามารถแสดงผลข้อมูลลอยด้วยทศนิยม 2 ตำแหน่งใน Java:
float ratingValue = 52.98929821f;
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsFR = Float.valueOf(decimalFormat.format(ratingValue)); // output is 52.98
ตกลง - str เพื่อลอย
package test;
import java.text.DecimalFormat;
public class TestPtz {
public static void main(String[] args) {
String preset0 = "0.09,0.20,0.09,0.07";
String[] thisto = preset0.split(",");
float a = (Float.valueOf(thisto[0])).floatValue();
System.out.println("[Original]: " + a);
a = (float) (a + 0.01);
// Part 1 - for display / debug
System.out.printf("[Local]: %.2f \n", a);
// Part 2 - when value requires to be send as it is
DecimalFormat df = new DecimalFormat();
df.setMinimumFractionDigits(2);
df.setMaximumFractionDigits(2);
System.out.println("[Remote]: " + df.format(a));
}
}
เอาท์พุท:
run:
[Original]: 0.09
[Local]: 0.10
[Remote]: 0.10
BUILD SUCCESSFUL (total time: 0 seconds)
โปรแกรมขนาดเล็กง่าย ๆ สำหรับการสาธิต:
import java.io.*;
import java.util.Scanner;
public class twovalues {
public static void main(String args[]) {
float a,b;
Scanner sc=new Scanner(System.in);
System.out.println("Enter Values For Calculation");
a=sc.nextFloat();
b=sc.nextFloat();
float c=a/b;
System.out.printf("%.2f",c);
}
}
เพียงทำString str = System.out.printf("%.2f", val).replace(",", ".");
ถ้าคุณต้องการให้แน่ใจว่าเป็นอิสระจากสถานที่ของผู้ใช้คุณจะได้รับ / แสดง "." เป็นตัวแยกทศนิยม นี่เป็นสิ่งจำเป็นหากคุณไม่ต้องการให้โปรแกรมของคุณทำงานขัดข้องหากคุณทำการแปลงในภายหลังfloat f = Float.parseFloat(str);
ปัญหาหนึ่งที่มีฉันเป็นเวลาหนึ่งชั่วโมงหรือมากกว่านั้นเปิดDecimalFormat
- มันจัดการอินพุตและอินพุตแบบลอยที่แตกต่างกัน การเปลี่ยนแปลงของRoundingModeก็ไม่ได้ช่วยอะไร ฉันไม่มีความเชี่ยวชาญ แต่คิดว่ามันอาจช่วยคนอย่างฉัน ลงเอยด้วยการใช้Math.round
แทน ดูด้านล่าง:
DecimalFormat df = new DecimalFormat("#.##");
double d = 0.7750;
System.out.println(" Double 0.7750 -> " +Double.valueOf(df.format(d)));
float f = 0.7750f;
System.out.println(" Float 0.7750f -> "+Float.valueOf(df.format(f)));
// change the RoundingMode
df.setRoundingMode(RoundingMode.HALF_UP);
System.out.println(" Rounding Up Double 0.7750 -> " +Double.valueOf(df.format(d)));
System.out.println(" Rounding Up Float 0.7750f -> " +Float.valueOf(df.format(f)));
เอาท์พุท:
Double 0.7750 -> 0.78
Float 0.7750f -> 0.77
Rounding Up Double 0.7750 -> 0.78
Rounding Up Float 0.7750f -> 0.77
ลองนี้: -
private static String getDecimalFormat(double value) {
String getValue = String.valueOf(value).split("[.]")[1];
if (getValue.length() == 1) {
return String.valueOf(value).split("[.]")[0] +
"."+ getValue.substring(0, 1) +
String.format("%0"+1+"d", 0);
} else {
return String.valueOf(value).split("[.]")[0]
+"." + getValue.substring(0, 2);
}
}
String.format(java.util.Locale.US,"%.2f", val);