জাভাতে ডাবল দশমিক বিন্যাস


118

ডাবলের দশমিক দশকে ফর্ম্যাট করতে আমার কিছু সমস্যা হচ্ছে। আমার যদি দ্বিগুণ মান হয়, যেমন 4.0.০, তবে আমি দশমিকগুলি কীভাবে বিন্যাস করব যাতে এটি পরিবর্তে ৪.০০ হয়?


ব্যবহার করার চেষ্টা করুন String.format()বা java.text.Format
কোড-শিক্ষানবিস


উত্তর:


218

এর মধ্যে একটির নাম্বার ফোরাম ব্যবহার করা হবে

NumberFormat formatter = new DecimalFormat("#0.00");     
System.out.println(formatter.format(4.0));

আউটপুট:

4.00


1
হ্যাঁ, তবে আমি কমা চাই না, আমি দশমিক চিহ্ন চাই।
ক্রিস্টোফার

আমি কমা পাচ্ছি এটাই আমি করেছি। "ডাবল ভেরিয়েবল; সংখ্যাফর্ম্যাট ফর্ম্যাটর = নতুন ডেসিমাল ফরম্যাট (" # 0.00 "); সিস্টেম.আউট.প্রিন্টলন (ফরম্যাটার.ফর্ম্যাট (ভেরিয়েবল));
ক্রিস্টোফার

এর জন্য আউটপুট এক্স, 00 এবং এক্স.00 নয়
ক্রিস্টোফার

9
আপনার জেভিএম দ্বারা ব্যবহৃত ডিফল্ট ভাষা ব্যবহারের কারণে আপনি কমা পাচ্ছেন যা সম্ভবত নাম্বারীর চেয়ে আলাদা। : একটি NumberFormat javadoc এ চেহারা আছে docs.oracle.com/javase/1.4.2/docs/api/java/text/...
মাইকেল Zilbermann

1
জিম ২০০1 হিসাবে উল্লেখ করা হয়েছে, আপনার লোকেল আলাদা হতে পারে। আমার উত্তরে প্রদত্ত লিঙ্কটি পড়ুন। শেষে আপনি এই সম্পর্কে তথ্য পাবেন।
কোসা

73

জাভা 8 এর সাহায্যে আপনি formatপদ্ধতিটি ব্যবহার করতে পারেন ..: -

System.out.format("%.2f", 4.0); // OR

System.out.printf("%.2f", 4.0); 
  • ffloatingবিন্দু মানের জন্য ব্যবহৃত হয় ..
  • 2 দশমিক চিহ্নের পরে দশমিক স্থানের পরে সংখ্যা .

বেশিরভাগ জাভা সংস্করণের জন্য আপনি ব্যবহার করতে পারেন DecimalFormat: -

    DecimalFormat formatter = new DecimalFormat("#0.00");
    double d = 4.0;
    System.out.println(formatter.format(d));

43

স্ট্রিং.ফর্ম্যাট ব্যবহার করুন :

String.format("%.2f", 4.52135);

ডক্স অনুসারে:

সর্বদা ব্যবহৃত লোকেলটি সেই দ্বারা ফিরে আসে Locale.getDefault()


8
দশমিক চিহ্ন ফর্ম্যাটিংয়ের জন্য অ্যাকাউন্টে স্ট্রিং.ফর্ম্যাট প্রথম প্যারামিটার হিসাবে একটি লোকেলকেও গ্রহণ করে।
ভিনসেন্ট মিমুন-প্রট

4
স্থানীয়-নির্দিষ্ট দশমিক চিহ্নগুলি (যেমন একটি কমা) এড়ানোর জন্য, মার্কিন লোকাল নির্দিষ্ট করুন: স্ট্রিং.ফর্ম্যাট (লোকেল.ইউএস, "%। 2 এফ", 4.52135);
আলেকজান্ডার

3
আমি বলব "দশমিক চিহ্ন হিসাবে মার্কিন লোকাল-নির্দিষ্ট বিন্দুটি ব্যবহার করতে, মার্কিন লোকাল নির্দিষ্ট করুন" .. এই ধারণাটি যে মার্কিন অভ্যাসগুলি সঠিক এবং অন্য সব কিছু "লোক" বিষয়বস্তু আমাকে পাগল করে তোলে।
সিমোন গিয়ানী

@ সিমোনজিয়ানী বোকা অনুমান করবেন না, কিছু লোকের বিন্দু হিসাবে দশমিকের প্রয়োজন হতে পারে। উদাহরণস্বরূপ আমি এমন একটি ফাংশন লিখছি যা একটি সিএসভি ডকুমেন্ট রফতানি করে, এবং আমার কমা থাকতে পারে না কারণ কমা চরিত্রটি ডিলিমেটার।
কায়সার কিস্টার

19

স্ট্রিং.ফর্ম্যাট ব্যবহার করে আপনি এটি করতে পারেন:

double price = 52000;
String.format("$%,.2f", price);

কমাটি লক্ষ্য করুন যা এটি @ ভিনসেন্টের উত্তর থেকে আলাদা করেছে

আউটপুট:

$52,000.00

বিন্যাসের জন্য একটি ভাল উত্স হ'ল বিষয়টির সরকারী জাভা পৃষ্ঠা


6

আপনি সর্বদা স্থিতিশীল পদ্ধতিটি ব্যবহার printf from System.outকরতে পারবেন - আপনি তার পরে সংশ্লিষ্ট ফর্ম্যাটরটি প্রয়োগ করবেন; এটি হ্যাপ স্পেস সংরক্ষণ করে যেখানে অন্যান্য উদাহরণগুলির জন্য আপনাকে করা দরকার।

উদা:

System.out.format("%.4f %n", 4.0); 

System.out.printf("%.2f %n", 4.0); 

হ্যাপ স্পেসটি সংরক্ষণ করে যা একটি দুর্দান্ত বড় বোনাস, তবুও আমি এই মতামতটি ধরে রাখি যে এই উদাহরণটি অন্য যে কোনও উত্তরের চেয়ে অনেক বেশি পরিচালনাযোগ্য, বিশেষত যেহেতু বেশিরভাগ প্রোগ্রামার সি থেকে প্রিন্টফ ফাংশন জানেন (জাভা ফাংশন / পদ্ধতিটি কিছুটা পরিবর্তিত করে)।


1
@ বাজ আমি কি এখানে একটি গুরুত্বপূর্ণ তথ্য অনুপস্থিত, এখানে কোনও প্রিন্টস্ট্রিমের উল্লেখ নেই। ওপি স্ট্যান্ডার্ড আউটপুট প্রবাহে ফর্ম্যাটিং সহায়তা (যা জাভা ডক্স দেখে আরও সহজেই সমাধান করা যেতে পারে) চাইছে। ব্যাখ্যা করা.
লুইস রবিন্স

আমার খারাপ। ভুল জাভাদোক সংস্করণ (1.4) তাকিয়ে ছিল। BTW: outহয় PrintStream
বাজ

@ বাজ কোন উদ্বেগ নেই। হ্যাঁ, আমি ধরে নিয়েছিলাম যে আপনি সেই শ্রেণীর কথা উল্লেখ করছেন, আমার সমস্ত বইয়ে প্রিন্টফকে সিস্টেম.আউট থেকে স্থির পদ্ধতি হিসাবে উল্লেখ করা হয়েছে (যেহেতু সেই পদ্ধতিগুলি স্থির)।
লুইস রবিন্স

1
ঠিক বলতে গেলে, printfএটি একটি স্থির পদ্ধতি PrintStreamএখানে দেখুন ;) তবে +1 তবুও।
বাজ

@ বাজ ডক্স থেকে প্রিন্টস্ট্রিম ক্লাস উত্তরাধিকারসূত্রে System.out। আমি সম্ভবত ভুল হতে পারি - যদিও স্থির পদ্ধতির উত্তরাধিকারী হওয়া বেশ আশ্চর্যজনক (এটি কি সম্ভব)? আপনি, যদিও আমি সঠিক আশা করি।
লুইস রবিন্স



1

ক্লাস setMinimumFractionDigitsথেকে পদ্ধতিটি ব্যবহার করা একটি বিকল্প পদ্ধতি NumberFormat

এখানে আপনি মূলত নির্দিষ্ট করে নিন যে দশমিক পয়েন্টের পরে আপনি কত নম্বর দেখতে চান।

সুতরাং একটি নির্দিষ্ট ইনপুট 4.0উত্পাদন হবে 4.00, ধরে নিবেন আপনার নির্দিষ্ট পরিমাণ 2।

তবে, যদি আপনার Doubleইনপুটটিতে উল্লিখিত পরিমাণের চেয়ে বেশি থাকে, তবে এটি নির্দিষ্ট করা সর্বনিম্ন পরিমাণ গ্রহণ করবে, তারপরে আরও নীচে একটি গোল যোগ করবে

উদাহরণস্বরূপ, 4.15465454সর্বনিম্ন 2 টি নির্দিষ্ট পরিমাণের সাথে উত্পাদিত হবে4.155

NumberFormat nf = NumberFormat.getInstance();
nf.setMinimumFractionDigits(2);
Double myVal = 4.15465454;
System.out.println(nf.format(myVal));

এটি অনলাইনে চেষ্টা করুন


1

আপনি এটি করতে পারেন এমন অনেকগুলি উপায় রয়েছে। এগুলি বোকা দেওয়া হয়:

ধরুন আপনার আসল নম্বরটি নীচে দেওয়া হয়েছে:

 double number = 2354548.235;

নাম্বার ফর্ম্যাট ব্যবহার:

NumberFormat formatter = new DecimalFormat("#0.00");
    System.out.println(formatter.format(number));

স্ট্রিং.ফর্ম্যাট ব্যবহার:

System.out.println(String.format("%,.2f", number));

ডেসিমালফর্ম্যাট এবং প্যাটার্ন ব্যবহার করে:

NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
        DecimalFormat decimalFormatter = (DecimalFormat) nf;
        decimalFormatter.applyPattern("#,###,###.##");
        String fString = decimalFormatter.format(number);
        System.out.println(fString);

ডেসিমালফর্ম্যাট এবং প্যাটার্ন ব্যবহার করে

DecimalFormat decimalFormat = new DecimalFormat("############.##");
        BigDecimal formattedOutput = new BigDecimal(decimalFormat.format(number));
        System.out.println(formattedOutput);

সমস্ত ক্ষেত্রে আউটপুট হবে: 2354548.23

দ্রষ্টব্য :

রাউন্ডিংয়ের সময় RoundingModeআপনি আপনার ফর্ম্যাটারে যুক্ত করতে পারেন । বেলো দেওয়া কিছু রাউন্ডিং মোড এখানে রয়েছে:

    decimalFormat.setRoundingMode(RoundingMode.CEILING);
    decimalFormat.setRoundingMode(RoundingMode.FLOOR);
    decimalFormat.setRoundingMode(RoundingMode.HALF_DOWN);
    decimalFormat.setRoundingMode(RoundingMode.HALF_UP);
    decimalFormat.setRoundingMode(RoundingMode.UP);

এখানে আমদানি করা হয় :

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;

1

আপনি নীচের যে কোনও একটি পদ্ধতি ব্যবহার করতে পারেন

  1. আপনি যদি ব্যবহার করছেন java.text.DecimalFormat

    DecimalFormat decimalFormat = NumberFormat.getCurrencyInstance(); 
    decimalFormat.setMinimumFractionDigits(2); 
    System.out.println(decimalFormat.format(4.0));

    অথবা

    DecimalFormat decimalFormat =  new DecimalFormat("#0.00"); 
    System.out.println(decimalFormat.format(4.0)); 
  2. আপনি যদি এটিকে সাধারণ স্ট্রিং ফর্ম্যাটে রূপান্তর করতে চান

    System.out.println(String.format("%.2f", 4.0)); 

উপরের সমস্ত কোড 4.00 প্রিন্ট করবে


0

100% কাজ করে।

import java.text.DecimalFormat;

public class Formatting {

    public static void main(String[] args) {
        double value = 22.2323242434342;
        // or  value = Math.round(value*100) / 100.0;

        System.out.println("this is before formatting: "+value);
        DecimalFormat df = new DecimalFormat("####0.00");

        System.out.println("Value: " + df.format(value));
    }

}

-3

প্রথম আমদানি NumberFormat। তারপরে এটি যুক্ত করুন:

NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();

এটি আপনাকে দুটি দশমিক স্থান দেবে এবং যদি এটি মুদ্রার সাথে লেনদেন করে তবে ডলার সাইন রাখবে।

import java.text.NumberFormat;
public class Payroll 
{
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) 
    {
    int hoursWorked = 80;
    double hourlyPay = 15.52;

    double grossPay = hoursWorked * hourlyPay;
    NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();

    System.out.println("Your gross pay is " + currencyFormatter.format(grossPay));
    }

}

1
প্রশ্নটি কোনও মুদ্রা প্রদর্শনের বিষয়ে নয় এবং ফর্ম্যাট ফাংশনগুলি ব্যবহার করে আরও সঠিকভাবে উত্তর দেওয়া হয়) যেমন অন্যান্য উত্তরে বর্ণিত)।
ইয়্যাক

-4

আপনি নিম্নলিখিত হিসাবে এটি করতে পারেন:

double d = 4.0;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));

1
এটি ##পরিবর্তে ব্যবহার করছে বলে কাজ করে না00
জোয়াকুইন ইরচুক

-4

আমি জানি যে এটি একটি পুরানো বিষয়, তবে আপনি যদি কমাটির পরিবর্তে পিরিয়ডটি পছন্দ করতে চান তবে এক্স, 00 হিসাবে আপনার ফলাফলটি কেবল একটি স্ট্রিংয়ে সংরক্ষণ করুন এবং কেবলমাত্র একটি সময়ের জন্য এটি পরিবর্তন করুন যাতে আপনি X.00 পান you

সহজতম উপায় হ'ল প্রতিস্থাপন ব্যবহার করা।

String var = "X,00";
String newVar = var.replace(",",".");

আউটপুটটি আপনি চেয়েছিলেন X.00 হবে । এটিকে সহজ করার জন্য আপনি এটি একসাথে করতে এবং এটি একটি ডাবল ভেরিয়েবলে সংরক্ষণ করতে পারেন:

Double var = Double.parseDouble(("X,00").replace(",",".");

আমি জানি যে এই উত্তরটি এখনই কার্যকর নয় তবে এই ফোরামটি যাচাই করে এমন কেউ এর মতো দ্রুত সমাধান খুঁজছেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.