স্ট্রিং.ফর্ম্যাট () জাভাতে ডাবল ফর্ম্যাট করতে


178

নীচের মতো ডাবল ফর্ম্যাট করতে স্ট্রিং.ফর্ম্যাট (স্ট্রিং, এক্স) বিন্যাস কীভাবে ব্যবহার করতে পারি ???

2354548.235 -> 2,354,548.23

ধন্যবাদ!

উত্তর:


295
String.format("%1$,.2f", myDouble);

String.format স্বয়ংক্রিয়ভাবে ডিফল্ট লোকেল ব্যবহার করে।


36
আপনি ব্যবহার করে একটি নির্দিষ্ট লোকেলও ব্যবহার করতে পারেনString.format(Locale.GERMAN, "%1$,.2f", myDouble);
অলিভিয়ের গ্রাগোয়ার

13
যদি ফর্ম্যাট করতে একাধিক ডাবল থাকে তবে% 1,% 2 ইত্যাদি ব্যবহার করুন। উদাহরণস্বরূপ স্ট্রিং.ফর্ম্যাট ("% 1 $ ,. 2f,% 2 $ ,. 2 এফ", মাইডুবল, এডুবল)
ময়েসিও

4
আমি বিশ্বাস করি যে "% 1 $" এক্ষেত্রে isচ্ছিক। আমার জন্য কেবল "%, 2f" ফর্ম্যাট হিসাবে স্ট্রিং হিসাবে কাজ করে।
ম্যাট পাসেল

5
হ্যাঁ, ম্যাট ঠিক আছে। %1, %2এবং এই জাতীয় আপনার ইনপুট আর্গুমেন্টের সূচকের উপর ভিত্তি করে আউটপুটটিকে পুনরায় অর্ডার করতে ব্যবহার করা যেতে পারে। এই দেখুন । আপনি সূচকটি বাদ দিতে পারেন এবং ডিফল্ট ক্রমটি ফর্ম্যাটর দ্বারা ধরে নেওয়া হবে।
প্রণীতলোক

1
বিভিন্ন অংশগুলির অর্থ কী তা আপনাকে একটি ব্যাখ্যা দেওয়া উচিত।
মিতুলাট বিটি

41
String.format("%4.3f" , x) ;

এর অর্থ হল যে আমাদের উত্তরগুলিতে মোট 4 টি সংখ্যা দরকার, যার মধ্যে 3 টি দশমিকের পরে হওয়া উচিত। এবং এফ হ'ল ফর্ম্যাট স্পেসিফায়ার। x এর অর্থ হল পরিবর্তনশীল যার জন্য আমরা এটি খুঁজতে চাই। আমার জন্য কাজ করেছেন। । ।


1
আমি মনে করি এটির অর্থ এটি দশমিকের পরে 3 টি স্থান অনুসরণকারী যুক্তিগুলির মধ্যে চতুর্থ পরিবর্তনশীল হবে।
মাইকেল ফুলটন

@ মিশেলফাল্টন এটি এত সহজ নয়: String.format("%014.3f" , 58.656565)-> 0000000058,657: মোট 14 টি প্রতীক: 8 টি শূন্য এবং 5 সংখ্যা এবং 1 কমা। তাই এই ক্ষেত্রে সংখ্যা 14 প্রতীক মোট সংখ্যা মানে (অতিরিক্ত বেশী শূন্য নেতৃস্থানীয় দিয়ে প্রতিস্থাপিত পেতে, ছাড়া যেতে পারে তারপর, এটা স্থান সঙ্গে প্রতিস্থাপন হবে) ফলাফলের স্ট্রিং.3অংশ এখানে সম্পূর্ণরূপে স্বাধীন।
পার্সিকার

তবে এখানে: String.format("%014.3f" , 58.656565)-> 58,657। আমি এটি গ্রহণ করি কারণ অগ্রাধিকার .3fঅংশে যায় : এটি প্রথমে 3 দশমিক স্থানের সাথে নম্বরটি মুদ্রণ করে এবং যদি চিহ্নগুলি থাকে তবে এটি শীর্ষস্থানীয় স্থান (বা শূন্য / যা কিছু) মুদ্রণ করে। এই ক্ষেত্রে সংখ্যাটি 2 + 3 + 1 = 6 চিহ্ন এবং আমরা কেবল 4 টি মুদ্রণ করতে চেয়েছিলাম, তাই কোনও অতিরিক্ত স্পেস অবশ্যই নেই।
পার্সিকার

24

আপনি যদি এটি ম্যানুয়ালি সেট চিহ্ন সহ ফর্ম্যাট করতে চান তবে এটি ব্যবহার করুন:

DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
decimalFormatSymbols.setDecimalSeparator('.');
decimalFormatSymbols.setGroupingSeparator(',');
DecimalFormat decimalFormat = new DecimalFormat("#,##0.00", decimalFormatSymbols);
System.out.println(decimalFormat.format(1237516.2548)); //1,237,516.25

যদিও লোকেল-ভিত্তিক ফর্ম্যাটিং পছন্দ করা হয়।


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

20

এই লিঙ্ক থেকে কোড এক্সট্রাক্ট ;

Double amount = new Double(345987.246);
NumberFormat numberFormatter;
String amountOut;

numberFormatter = NumberFormat.getNumberInstance(currentLocale);
amountOut = numberFormatter.format(amount);
System.out.println(amountOut + " " + 
                   currentLocale.toString());

এই উদাহরণ থেকে প্রাপ্ত আউটপুটটি দেখায় যে কীভাবে একই সংখ্যার ফর্ম্যাটটি লোকালের সাথে পরিবর্তিত হয়:

345 987,246  fr_FR
345.987,246  de_DE
345,987.246  en_US

13
public class MainClass {
   public static void main(String args[]) {
    System.out.printf("%d %(d %+d %05d\n", 3, -3, 3, 3);

    System.out.printf("Default floating-point format: %f\n", 1234567.123);
    System.out.printf("Floating-point with commas: %,f\n", 1234567.123);
    System.out.printf("Negative floating-point default: %,f\n", -1234567.123);
    System.out.printf("Negative floating-point option: %,(f\n", -1234567.123);

    System.out.printf("Line-up positive and negative values:\n");
    System.out.printf("% ,.2f\n% ,.2f\n", 1234567.123, -1234567.123);
  }
}

এবং প্রিন্ট আউট:

3 (3) +3 00003
ডিফল্ট ফ্লোটিং-পয়েন্ট ফর্ম্যাট: 1234567,123000
কমা সহ ভাসমান-পয়েন্ট: 1.234.567,123000
নেতিবাচক ভাসমান-পয়েন্ট ডিফল্ট: -1.234.567,123000
নেতিবাচক ভাসমান-পয়েন্ট বিকল্প: (1.234.567, 123000)

লাইন আপ ইতিবাচক এবং নেতিবাচক মান:
1.234.567,12
-1.234.567,12 12


2

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

মনে করুন আপনার আসল নম্বরটি নমুনা দেওয়া হয়েছে: দ্বিগুণ সংখ্যা = 2354548.235;

ব্যবহার NumberFormatএবং রাউন্ডিং মোড

NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
    DecimalFormat decimalFormatter = (DecimalFormat) nf;
    decimalFormatter.applyPattern("#,###,###.##");
    decimalFormatter.setRoundingMode(RoundingMode.CEILING);

    String fString = decimalFormatter.format(number);
    System.out.println(fString);

স্ট্রিং বিন্যাস ব্যবহার করে Using

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

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

দ্রষ্টব্য :

রাউন্ডিংয়ের সময় 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

ব্যবহার DecimalFormat

 NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
 DecimalFormat decimalFormatter = (DecimalFormat) nf;
 decimalFormatter.applyPattern("#,###,###.##");
 String fString = decimalFormatter.format(myDouble);
 System.out.println(fString);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.