জাভাতে হাজার হাজার বিভাজক কীভাবে সেট করবেন?


129

জাভাতে হাজার হাজার বিভাজক কীভাবে সেট করবেন?
আমার কাছে বিগডিসিমালের স্ট্রিং প্রতিনিধিত্ব রয়েছে যা আমি কয়েক হাজার বিভাজকের সাথে ফর্ম্যাট করতে চাই এবং স্ট্রিং হিসাবে ফিরে আসতে চাই।


আপনি এই মানগুলি ডিবি থেকে পাচ্ছেন?
ডেড প্রোগ্রামার

উত্তর:


110

এটি কাজ করা উচিত (জাভেডকের উপর ভিত্তি করে অনির্ধারিত):

DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US);
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();

symbols.setGroupingSeparator(' ');
formatter.setDecimalFormatSymbols(symbols);
System.out.println(formatter.format(bd.longValue()));

জাভাডকের মতে, প্রথম লাইনে থাকা কাস্টটি বেশিরভাগ লোকেলের জন্য সংরক্ষণ করা উচিত।


16
এই অপরীক্ষিত মন্তব্য: জন্য Javadoc getDecimalFormatSymbols()বলেছেন: Returns: a copy of the desired DecimalFormatSymbols। সুতরাং setDecimalFormatSymbols(theCopy)অনুলিপি পরিবর্তন করার পরে আপনার ব্যবহার করা উচিত ।
java.is.for.desktop

6
Bd.longValue () এর দস্তাবেজগুলি বলে যে "যে কোনও ভগ্নাংশই বাদ দেওয়া হবে"। সুতরাং আপনি যদি নির্ভুলতার বিষয়ে চিন্তা করেন তবে এটি করার সবচেয়ে ভাল উপায় আমি জানি না
কোডডোজর

2
আমি অনুমান করি আপনি এটি ব্যবহার করতে পারেন newএবং এটি ফর্ম্যাটারে ফিরে সেট করতে পারেন : DecimalFormatSymbols customSymbol = new DecimalFormatSymbols(); customSymbol.setDecimalSeparator(decimalSeperator.charAt(0)); customSymbol.setGroupingSeparator(thousandSeperator); formatter.setDecimalFormatSymbols(customSymbol);
লি ইয়ি হংক

আমি মনে করি আপনি গ্রুপিং বিভাজক হিসাবে \ u00a0 (নন-ব্রেকিং স্পেস) ব্যবহার করতে চাইবেন। এটি কিছু লোকেলের জন্য ডিফল্ট।
ACV

3
কেন আপনি লম্বাভ্যালু কল? প্রশ্নটি ছিল বিগডিসিমালের জন্য হাজার হাজার অপারেটর সেট করা, বেশি দিন নয়।
FINDarkside

232

আপনি "," এর সাথে ফর্ম্যাট ফাংশন ব্যবহার করতে পারেন;

int no = 124750;
String str = String.format("%,d", no);

//str = 124,750

"," এর মধ্যে লোকেল-নির্দিষ্ট গ্রুপিংয়ের অক্ষর অন্তর্ভুক্ত রয়েছে।

ডক্স


11
আমি যদি .একটি বিভাজক হিসাবে ব্যবহার করতে চাই ?
এনিসে

আমি সাধারণত স্ট্রিং.ফর্ম্যাট ব্যবহার করি এটি আমার পক্ষে সেরা এবং সহজ!
আলী

16
ফোন করুন @Enissay format()একটি সুনির্দিষ্ট লোকেল সঙ্গে ( Local.USব্যবহার পরিচিত ,একটি বিভাজক হিসেবে) এবং তারপর প্রতিস্থাপন ,আপনার কাস্টম বিভাজক সঙ্গে String.format(Locale.US, "%,d", n).replace(',', '.')
minipif

java.util.Illegal FormatConversionException:% d java.lang. স্ট্রিং আর্গুমেন্ট ফর্ম্যাট করতে পারে না
ইমান মারাশি

1
@ImanMarashi একটি সামনে ছুঁড়ে int। বা ক long। বা ক BigInteger। এবং ব্যবহার করতে চাইলে চ ব্যবহার করুন double, floatবা BigDecimal
অ্যাডোরাথ

56
BigDecimal bd = new BigDecimal(300000);

NumberFormat formatter = NumberFormat.getInstance(new Locale("en_US"));

System.out.println(formatter.format(bd.longValue()));

সম্পাদনা

কাস্টম গ্রুপিং বিভাজক যেমন স্থান পেতে, এটি করুন:

DecimalFormatSymbols symbols = DecimalFormatSymbols.getInstance();
symbols.setGroupingSeparator(' ');

DecimalFormat formatter = new DecimalFormat("###,###.##", symbols);
System.out.println(formatter.format(bd.longValue()));

আমি জানি আমি DecimalFormatSymbols setGroupingSeparator ব্যবহার করতে হবে, কিন্তু আমি কিভাবে আমার BigDecimal এটি প্রয়োগ জানি না
Funtime

1
@ ফানটাইম: আপনি "আপনার বিগডিসিমালে এটি প্রয়োগ করেন না"। আপনি NumberFormatপছন্দসই বৈশিষ্ট্যগুলির সাথে একটি অবজেক্ট তৈরি করেন এবং এটি আপনার ফর্ম্যাট করতে ব্যবহার করেন BigDecimal। একজন BigDecimalশুধুমাত্র একটি নির্দিষ্ট মূল্য আছে, এটা না একটি নির্দিষ্ট বিন্যাস আছে।
জোছিম সাউর

1
মনে রাখবেন যে হাজার হাজার বিভাজক সাধারণত একটি অবিচ্ছিন্ন স্থান (যখন এটি কোনও স্থান হয়)
cquezel

২ য় বিকল্পের শীর্ষ পংক্তিকে ডেসিমালফর্ম্যাটসিম্বলস প্রতীক = নতুন ডেসিমালফর্ম্যাটসিম্বলস () এ পরিবর্তন করতে হয়েছিল; এই কাজ করার জন্য।
পেপারটিক

14

এই কোডটি ব্রাজিলের হিসাবে ব্যবহৃত হিসাবে ফর্ম্যাট করতে চেষ্টা করুন:

    DecimalFormat df = new DecimalFormat(
      "#,##0.00", 
      new DecimalFormatSymbols(new Locale("pt", "BR")));

    BigDecimal value = new BigDecimal(123456.00);

    System.out.println(df.format(value.floatValue()));

    // results: "123.456,00"

2
আপনিও এটি চেষ্টা করে দেখুন, জ্যাস্পার রিপোর্টগুলির ক্ষেত্রে ফর্ম্যাটটি সঠিকভাবে জোর করে: parameters.put("REPORT_LOCALE", new Locale("pt", "BR")); রিপোর্ট করার জন্য এই পরামিতিটি প্রেরণ করুন।
ডেলাসাভিয়া

8

আপনি যদি পূর্ণসংখ্যার ডেটা টাইপের জন্য হাজার বিভাজক ব্যবহার করেন তবে 1 ব্যবহার করুন।

  1. পূর্ণসংখ্যার ডেটা টাইপের জন্য

স্ট্রিং.ফর্ম্যাট ("%, d \ n", 58625) এবং আউটপুট 58,625 হবে

  1. ফ্লোটিং পয়েন্ট ডেটার জন্য স্ট্রিং.ফর্ম্যাট টাইপ করুন ("%। 2f", 58625.21) এবং আউটপুট 58,625.21 হবে

এটি একটি এপিফ্যানি ছিল। তবে, আপনাকে সত্যই চাপ দিতে হবে, "" "কেবল একটি পতাকা, এটি গ্রুপ বিভাজক হিসাবে ব্যবহৃত চরিত্র নয়। (সমস্যাটি সন্ধান করতে আমাকে কিছুটা সময় নিয়েছে)) ডকস.ওরকল
জাভাসে

5
DecimalFormatSymbols formatSymbols = new DecimalFormatSymbols();
formatSymbols.setDecimalSeparator('|');
formatSymbols.setGroupingSeparator(' ');

String strange = "#,##0.###";
DecimalFormat df = new DecimalFormat(strange, formatSymbols);
df.setGroupingSize(4);

String out = df.format(new BigDecimal(300000).doubleValue());

System.out.println(out);

4
NumberFormat nf = DecimalFormat.getInstance(myLocale);
DecimalFormatSymbols customSymbol = new DecimalFormatSymbols();
customSymbol.setDecimalSeparator(',');
customSymbol.setGroupingSeparator(' ');
((DecimalFormat)nf).setDecimalFormatSymbols(customSymbol);
nf.setGroupingUsed(true);

3

গৃহীত উত্তরটি সত্যই পরিবর্তন করতে হবে অন্যথায় কাজ করছে না। GetDecimalFormatSymbols একটি আত্মরক্ষামূলক কপি করে তোলে। সুতরাং,

DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US);
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();

symbols.setGroupingSeparator(' ');
formatter.setDecimalFormatSymbols(symbols);
System.out.println(formatter.format(bd.longValue()));

নতুন লাইনটি হ'ল: formatter.setDecimal FormatSymbols (চিহ্ন);


2

জন্য দশমিক :

DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setGroupingSeparator(' ');
DecimalFormat dfDecimal = new DecimalFormat("###########0.00###");
dfDecimal.setDecimalFormatSymbols(symbols);
dfDecimal.setGroupingSize(3);
dfDecimal.setGroupingUsed(true);
System.out.println(dfDecimal.format(number));

1

উপরে উল্লিখিত হিসাবে, নিম্নলিখিত লিঙ্কটি আপনাকে জাভা নম্বরটি স্থানীয়করণের অনুমতি দেওয়ার জন্য নির্দিষ্ট দেশ কোড দেয়। প্রতিটি দেশের নিজস্ব স্টাইল রয়েছে।

উপরের লিঙ্কে আপনি যে দেশের কোডটি এখানে স্থাপন করা উচিত তা পাবেন:

...(new Locale(<COUNTRY CODE HERE>));

উদাহরণস্বরূপ সুইজারল্যান্ড নম্বরগুলি ফর্ম্যাট করে:

1000.00 -> 1'000.00

কান্ট্রি কোড

এটি অর্জনের জন্য , নিম্নলিখিত কোডগুলি আমার পক্ষে কাজ করে:

NumberFormat nf = NumberFormat.getNumberInstance(new Locale("de","CH"));
nf.setMaximumFractionDigits(2);
DecimalFormat df = (DecimalFormat)nf;
System.out.println(df.format(1000.00));

আশানুরূপ ফলাফল:

1'000.00

1
public String formatStr(float val) {
 return String.format(Locale.CANADA, "%,.2f", val);
}

formatStr(2524.2) // 2,254.20



যদিও এই কোডটি প্রশ্নের সমাধান দিতে পারে, কেন / কীভাবে এটি কাজ করে তা প্রসঙ্গে যুক্ত করা ভাল। এটি ভবিষ্যতের ব্যবহারকারীদের শিখতে এবং তাদের নিজস্ব কোডটিতে সেই জ্ঞানটি প্রয়োগ করতে সহায়তা করতে পারে। কোডটি ব্যাখ্যা করা হলে আপনিও upvotes আকারে ব্যবহারকারীদের কাছ থেকে ইতিবাচক প্রতিক্রিয়া জানাতে পারেন।
borchvm
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.