উত্তর:
আপনি printf
পদ্ধতিটি যেমন ব্যবহার করতে পারেন :
System.out.printf("%.2f", val);
সংক্ষেপে, %.2f
সিনট্যাক্সটি জাভাটিকে আপনার ভেরিয়েবলটি ( val
2) দশমিক স্থান ( .2
) সহ f
ফর্ম্যাট স্পেসিফায়ার ( %
) বিন্যাসের সূচনা থেকে ভাসমান-পয়েন্ট সংখ্যা ( ) এর দশমিক উপস্থাপনে ফিরে আসতে বলে ।
এছাড়াও অন্যান্য রূপান্তর অক্ষর আপনি ব্যবহার করতে পারেন f
:
d
: দশমিক পূর্ণসংখ্যাo
: অক্টাল পূর্ণসংখ্যাe
: বৈজ্ঞানিক স্বরলিপি মধ্যে ভাসমান পয়েন্ট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
।
উদাহরণস্বরূপ, আপনি ব্যবহার করতে পারেন 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
জাভাটির সাম্প্রতিক সংস্করণ থাকলে আপনি এটিও ব্যবহার করতে পারেন:
System.out.printf("%1.2f", 3.14159D);
প্রিন্টফ ফর্ম্যাট স্ট্রিং সম্পর্কে আরও তথ্যের জন্য ফর্ম্যাটরে ডকগুলি দেখুন ।
একটি সহজ কৌশলটি হল আপনার ভেরিয়েবলের একটি সংক্ষিপ্ত সংস্করণ উত্পন্ন করে এটির সাথে গুণিত করে 100
, এটিকে গোল করে এবং 100.0
আবার ভাগ করে । এইভাবে আপনি 2 দশমিক স্থান সহ একটি ভেরিয়েবল উত্পন্ন করেন :
double new_variable = Math.round(old_variable*100) / 100.0;
এই "সস্তা ট্রিক "টি সর্বদা আমার পক্ষে যথেষ্ট ভাল ছিল এবং যে কোনও ভাষায় কাজ করে (আমি জাভা ব্যক্তি নই, কেবল এটি শিখছি)।
আপনি নীচে এই দ্রুত কোডগুলি ব্যবহার করতে পারেন যা শেষে নিজেই পরিবর্তিত হয়েছিল। বিন্দুটির পরে উল্লেখ করা যায় যে কতগুলি শূন্য রয়েছে
float y1 = 0.123456789;
DecimalFormat df = new DecimalFormat("#.00");
y1 = Float.valueOf(df.format(y1));
ভেরিয়েবল y1 এর আগে 0.123456789 এর সমান ছিল । কোড পরে এটি 0.12 এ পরিণত হয় ।
এ লুক DecimalFormat
টিউটোরিয়াল থেকে এখানে একটি উদাহরণ:
DecimalFormat myFormatter = new DecimalFormat(pattern);
String output = myFormatter.format(value);
System.out.println(value + " " + pattern + " " + output);
আপনি যদি "###। ##" এর মতো একটি প্যাটার্ন চয়ন করেন তবে আপনি দুটি দশমিক স্থান পাবেন এবং আমি মনে করি মানগুলি গোল হয়ে গেছে। আপনি যে সঠিক ফর্ম্যাটটি চান তা পেতে লিঙ্কটি দেখতে চাইবেন (যেমন, আপনি পিছনের শূন্যগুলি চান কিনা)
ঠিক আছে - স্ট্রেট থেকে ভাসা।
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
- এটি ডাবল এবং ফ্লোট ইনপুটগুলি ভিন্নভাবে পরিচালনা করে। এমনকি রাউন্ডিংমডের পরিবর্তনও কোনও উপকারে আসেনি। আমি কোনও বিশেষজ্ঞ নই তবে ভেবেছিলাম এটি আমার মতো কাউকে সাহায্য করতে পারে। 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);