ফর্ম্যাট বিগডিসিমাল মানগুলি কীভাবে মুদ্রণ করবেন?


104

আমি একটি আছে BigDecimalক্ষেত্র amountযা টাকা প্রতিনিধিত্ব করে, এবং আমি মত একটি বিন্যাসে ব্রাউজারে এর মান মুদ্রণ প্রয়োজন $123.00, $15.50, $0.33

আমি এটা কিভাবে করবো?

(শুধুমাত্র সহজ সমাধান যা আমি দেখতে নিজেকে হচ্ছে floatValueথেকে BigDecimalব্যবহার করে এবং তারপর NumberFormatভগ্নাংশ অংশ জন্য দুই অঙ্ক স্পষ্টতা করতে)।

উত্তর:


134
public static String currencyFormat(BigDecimal n) {
    return NumberFormat.getCurrencyInstance().format(n);
}

এটি Localeআপনার মুদ্রার প্রতীক চয়ন করতে আপনার জেভিএমের বর্তমান ডিফল্ট ব্যবহার করবে । অথবা আপনি একটি নির্দিষ্ট করতে পারেন Locale

NumberFormat.getInstance(Locale.US)

আরও তথ্যের জন্য, NumberFormatক্লাস দেখুন।


ডেসিমালফর্ম্যাট যেমন করে তেমন কোনও প্যাটার্ন নির্দিষ্ট করা সম্ভব?
ফিলিপ জিওসিফি

70

হাজার বিভাজক সেট করতে, 123,456.78আপনাকে ডেসিমালফর্ম্যাটটি ব্যবহার করতে হবে :

     DecimalFormat df = new DecimalFormat("#,###.00");
     System.out.println(df.format(new BigDecimal(123456.75)));
     System.out.println(df.format(new BigDecimal(123456.00)));
     System.out.println(df.format(new BigDecimal(123456123456.78)));

ফলাফল এখানে:

123,456.75
123,456.00
123,456,123,456.78

যদিও আমি #,###.00মুখোশ সেট করেছি , এটি সফলভাবে দীর্ঘতর মানগুলিকেও ফর্ম্যাট করে। নোট করুন যে ফলস্বরূপ কমা (,) বিভাজক আপনার লোকেলের উপর নির্ভর করে। এটি রাশিয়ান লোকালের জন্য কেবল স্থান () হতে পারে।


19
আপনি যদি 0.00 হিসাবে প্রদর্শিত শূন্য পছন্দ করেন (.00 এর পরিবর্তে), "#,##0.00"পরিবর্তে প্যাটার্নটি ব্যবহার করুন।
জোনিক

35

প্রদত্ত পরিস্থিতিটি বোঝার জন্য অন্য উপায়টি হ'ল

BigDecimal newBD = oldBD.setScale(2);

আমি কেবল এটি বলি কারণ কিছু ক্ষেত্রে যখন অর্থ আসে তখন 2 দশমিক স্থানের বাইরে যাওয়ার অর্থ হয় না। এটি আরও একধাপ এগিয়ে নিয়ে যাওয়ার ফলে এটি হতে পারে

String displayString = oldBD.setScale(2).toPlainString();

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


14
 BigDecimal pi = new BigDecimal(3.14);
 BigDecimal pi4 = new BigDecimal(12.56);

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

// প্রিন্টস 3.14

System.out.printf("%.0f",pi4);

// প্রিন্ট 13


6

@ জেফ_এলিফসনের উত্তরের অনুরূপ, তবে ডিফল্টর উপর নির্ভর করে না Locale :

DecimalFormatSymbolsসুস্পষ্ট লোকেলের জন্য ব্যবহার করুন :

DecimalFormatSymbols decimalFormatSymbols  = DecimalFormatSymbols.getInstance(new Locale("ru", "RU"));

বা স্পষ্টত বিভাজক প্রতীক:

DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
decimalFormatSymbols.setDecimalSeparator('.');
decimalFormatSymbols.setGroupingSeparator(' ');

তারপর:

new DecimalFormat("#,##0.00", decimalFormatSymbols).format(new BigDecimal("12345"));

ফলাফল:

12 345.00

1
BigDecimal(19.0001).setScale(2, BigDecimal.RoundingMode.DOWN)

1
বিগডিসিমাল (19.001) হওয়া উচিত। সেটস্কেল (2, বিগডিসিমাল.রোউND_HALF_UP)। টু স্ট্রিং ()
জেফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.