জাভাতে দশমিক বিভাজক হিসাবে ফোর্স পয়েন্ট ("।")


103

আমি বর্তমানে ডাবল মুদ্রণের জন্য নিম্নলিখিত কোডগুলি ব্যবহার করছি:

return String.format("%.2f", someDouble);

এটি ভালভাবে কাজ করে, জাভা আমার লোকালের দশমিক বিভাজক (কমা) ব্যবহার করে আমি যখন একটি বিন্দু ব্যবহার করতে চাই তা বাদ দিয়ে এটি কার্যকরভাবে কাজ করে। এটি করার কোন সহজ উপায় আছে?


আপনার যদি সুনির্দিষ্ট দশমিকের সাথে ডাবল মানটি ব্যবহার করার দরকার হয় তবে আপনার দ্বিগুণ / ডাবলের পরিবর্তে বিগডিসিমাল ব্যবহার করা উচিত। ডাবল ভেরিয়েবল ব্যবহার করার সময় আপনি যে সমস্যার মুখোমুখি হতে পারেন সেগুলির জন্য এই লিঙ্কটি দেখুন । আপনি এটি ব্যবহার করে দেখতে পারেন: System.out.println (5.1 ডি + 1.1 ডি); - ফলাফলটি 6.2 এর পরিবর্তে 6.199999999999999 হবে। আমি মনে করি যে স্ট্রিং হিসাবে দশমিকের সাথে সংখ্যার ফর্ম্যাট করার জন্য কেউ তাকিয়ে থাকতে হবে অবশ্যই ডাবল ভেরিয়েবলগুলি এড়িয়ে চলবে।
রাজনওয়োন

উত্তর:


172

অতিরিক্ত লোড ব্যবহার করুন String.formatযা আপনাকে লোকেল নির্দিষ্ট করতে দেয়:

return String.format(Locale.ROOT, "%.2f", someDouble);

আপনি যদি এখানে কেবল কোনও সংখ্যার ফর্ম্যাট করছেন - তবে আপনি যেমন রয়েছেন NumberFormatতবে সম্ভবত ব্যবহার করা আরও উপযুক্ত হবে। তবে আপনার যদি বাকী বিন্যাসের বাকি ক্ষমতাগুলির প্রয়োজন হয় তবে এটি ঠিকঠাক String.formatকাজ করা উচিত।


6
লোকাল.আরআউট আরও নিরপেক্ষ।
স্পিডোগু

@ স্পিডোগু: সম্পাদিত, যদিও আমি সংখ্যার ফর্ম্যাটিংয়ের জন্য সন্দেহ করি তবে এতে কোনও পার্থক্য নেই।
জন স্কিটে

1
হ্যাঁ, তবে মার্কিন যুক্তরাষ্ট্র এবং যুক্তরাজ্যের মধ্যে আপনাকে বেছে নেওয়ার দরকার নেই। 😜
স্পিডোগু

2
দশমিক বিভাজক হিসাবে কোনও দেশের পছন্দের ভবিষ্যতে সম্ভাব্য পরিবর্তনের বিরুদ্ধেও স্থানীয় নিরাপদ RO
আটটিলা ট্যানই

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

21

আরও বেশি কঠোর সমাধান হ'ল মূল () এর প্রথম দিকে আপনার লোকাল সেট করা।

ভালো লেগেছে:

Locale.setDefault(new Locale("en", "US"));

11
এটি একটি খুব সমস্যাযুক্ত উত্তর, কারণ এটির একটি বিশ্বব্যাপী প্রভাব রয়েছে, ফলে অন্যান্য অনেকগুলি (সম্ভবত অবাঞ্ছিত) পরিবর্তন হতে পারে।
সেলসেকে

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

10

আপনি java.lang.String.format পাশাপাশি java.io. মুদ্রণপ্রবাহ.প্রিন্টফ (যেমন সিস্টেম.আউট.প্রিন্টফ ()) এ একটি অতিরিক্ত লোকেল পাস করতে পারেন:

import java.util.Locale;

public class PrintfLocales {

    public static void main(String args[]) {
        System.out.printf("%.2f: Default locale\n", 3.1415926535);
        System.out.printf(Locale.GERMANY, "%.2f: Germany locale\n", 3.1415926535);
        System.out.printf(Locale.US, "%.2f: US locale\n", 3.1415926535);
    }

}

এর ফলাফল নিম্নলিখিত (আমার পিসিতে):

$ java PrintfLocales
3.14: Default locale
3,14: Germany locale
3.14: US locale

জাভা এপিআই-তে স্ট্রিং.ফর্ম্যাট দেখুন ।


4
আপনি স্থানীয়ভাবে উপস্থাপনা পেতে out.printf((Locale)null, ...)বা ব্যবহার করতে পারেন or out.format((Locale)null, ...)(এবং Locale.ROOT
এটিতেও রয়েছে

10

অনেক দেরিতে তবে এখানে উল্লিখিত অন্যান্য হিসাবে নমুনা ব্যবহার NumberFormat(এবং এর উপক্লাস DecimalFormat)

public static String format(double num) {
    DecimalFormatSymbols decimalSymbols = DecimalFormatSymbols.getInstance();
    decimalSymbols.setDecimalSeparator('.');
    return new DecimalFormat("0.00", decimalSymbols).format(num);
 }

আমার অনুভূতি আছে যে DecimalFormatSymbolsএই পদ্ধতির আগে বিভাজক তৈরি করা এবং সেট করা উচিত।
লাইন

0

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

জাভা টিউটোরিয়ালস স্থানীয় এই স্পেসিফিক বিন্যাস থেকে এই লিঙ্কটি একবার দেখুন

লোকেল-সংবেদনশীল বিন্যাস শিরোনামে বিভাগটি আপনার প্রয়োজনীয় need


-3

আমি একই সমস্যা ছিল .. 55.1রূপান্তরিত 55,10। আমার দ্রুত (নোংরা?) ফিক্সটি হ'ল:

String.format("%.2f", value).replaceAll(",",".");


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