দশমিক ফর্ম্যাট এর দশমিক বিভাজককে কমা থেকে বিন্দু / বিন্দুতে কীভাবে পরিবর্তন করবেন?


204

আমার কাছে এই ছোট্ট পাগল পদ্ধতি রয়েছে যা বিগডিসিমাল মানগুলিকে সুন্দর এবং পঠনযোগ্য স্ট্রিংগুলিতে রূপান্তর করে।

private String formatBigDecimal(BigDecimal bd){
    DecimalFormat df = new DecimalFormat();
    df.setMinimumFractionDigits(3);
    df.setMaximumFractionDigits(3);
    df.setMinimumIntegerDigits(1);
    df.setMaximumIntegerDigits(3);
    df.setGroupingSize(20);
    return df.format(bd);
}

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

xxx,xxx

আমার বিভাজকের দরকার বিন্দু বা বিন্দু এবং কমা নয়। এই ছোট্ট কীর্তিটি কীভাবে সম্পাদন করা যায় তার কারও কি কোনও ধারণা নেই?

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


এছাড়াও দেখুন
স্ট্যাকওভারফ্লো.

উত্তর:


323

আপনি লোকেল সেট করে বা ডেসিমাল ফোর্ম্যাট সিম্বলগুলি ব্যবহার করে বিভাজকটি পরিবর্তন করতে পারেন ।

আপনি যদি গ্রুপিং বিভাজককে একটি বিন্দু হতে চান তবে আপনি একটি ইওরোপীয় লোকেল ব্যবহার করতে পারেন:

NumberFormat nf = NumberFormat.getNumberInstance(Locale.GERMAN);
DecimalFormat df = (DecimalFormat)nf;

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

DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(currentLocale);
otherSymbols.setDecimalSeparator(',');
otherSymbols.setGroupingSeparator('.'); 
DecimalFormat df = new DecimalFormat(formatString, otherSymbols);

currentLocale Locale.getDefault () IE থেকে প্রাপ্ত করা যাবে:

Locale currentLocale = Locale.getDefault();


আমি অন্যান্য সিম্বলস.সেটডিসিমাল সেপেটর (',') পরিবর্তন করেছি; অন্যান্য সিম্বলস.সেটডিসিমালসাপারেটর হিসাবে ('।'); ধন্যবাদ .এটি আমার পক্ষে কাজ করে
আকণশা

2
ফর্ম্যাটটি দেখতে কেমন লাগে, উদাহরণস্বরূপ সিনট্যাক্সের জন্য String formatString = "#,###,###,##0.00";
ডকস.অরাকল.com

1
"আপনি একটি ইওরোপীয় লোকেল ব্যবহার করতে পারেন"। ঠিক আছে, আপনি ইউরোপ থেকে কোনও স্থানীয় লোকাল ব্যবহার করতে পারবেন না কারণ Locale.UKফিরে আসবে 1,567.90 এবং 1.567,90 নয়
জুনিয়র মেহে

পার্শ্ব নোট: NumberFormat.getNumberInstance()কিছু অ্যান্ড্রয়েড 7 ডিভাইসে অস্বাভাবিক ধীরে ধীরে চলতে পারে। একটি বিকল্প String.format()যা দ্রুত চলে। দেখুন stackoverflow.com/questions/2379221/java-currency-number-format
জনাব-আইডিই

14

ইউরোপ বেশ বিশাল। আমি নিশ্চিত নই যে তারা সর্বত্র একই বিন্যাসটি ব্যবহার করে। তবে এটি বা এই উত্তরটি সহায়ক হবে।

String text = "1,234567";
NumberFormat nf_in = NumberFormat.getNumberInstance(Locale.GERMANY);
double val = nf_in.parse(text).doubleValue();

NumberFormat nf_out = NumberFormat.getNumberInstance(Locale.UK);
nf_out.setMaximumFractionDigits(3);
String output = nf_out.format(val);

অর্থাৎ সঠিক লোকেল ব্যবহার করুন।


1
সত্যই স্যার! ইউকেতে "£ 1,234.00" দেখা উচিত, যখন ফ্রান্সে "1 234,00 €" প্রত্যাশিত (গ্রুপ বিভাজক, দশমিক বিভাজক, মুদ্রার প্রতীক এবং মুদ্রার অবস্থান পরিবর্তিত হয়েছে)।
ভলপো

9
public String getGermanCurrencyFormat(double value) {
    NumberFormat nf = NumberFormat.getNumberInstance(Locale.GERMAN);
    nf.setGroupingUsed(true);
    return "€ " + nf.format(value);
}

5

বিগডিসিমাল লোকাল সেটিংসকে সম্মান করে বলে মনে হচ্ছে না।

Locale.getDefault(); //returns sl_SI

স্লোভেনীয় লোকালে দশমিক কমা থাকা উচিত। অনুমান সংখ্যা সম্পর্কে আমার কাছে অদ্ভুত ভুল ধারণা ছিল।

a = new BigDecimal("1,2") //throws exception
a = new BigDecimal("1.2") //is ok

a.toPlainString() // returns "1.2" always

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

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

ফর্ম্যাটর ব্যবহার করে উল্লিখিত অন্যরা ঠিক কাজ করে works জেএসএফ ফ্রন্টএন্ডের জন্য কেবলমাত্র বিন্যাসগুলি ব্যবহার করুন, ফর্ম্যাটরগুলি সঠিকভাবে কাজটি করে এবং লোকাল সম্পর্কে সচেতন।


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