জাভাতে আর্থিক মূল্যবোধ উপস্থাপন করা [বন্ধ]


94

আমি বুঝতে পারি যে বিগডিসিমাল জাভাতে আর্থিক মান উপস্থাপনের জন্য সেরা অনুশীলনের সুপারিশ করা হয়। তুমি কি ব্যবহার কর? আপনি কি এর চেয়ে আরও ভাল গ্রন্থাগার ব্যবহার করতে চান?


4
কটাক্ষপাত করা 354 JSR
yegor256

4
এখানে একটি মুদ্রা শ্রেণি রয়েছে যা আপনি অনুলিপি এবং প্রসারিত করতে পারেন: java-articles.info/articles/?p=254
গিলবার্ট লে ব্ল্যাঙ্ক

উত্তর:


81

BigDecimalসর্বদিকে. আমি শুনেছি কিছু লোক তাদের নিজস্ব Cashবা Moneyক্লাস তৈরি করেছে যা মুদ্রার সাথে নগদ মানকে আবদ্ধ করে, তবে ত্বকের নিচে এটি এখনও একটি BigDecimal, সম্ভবত BigDecimal.ROUND_HALF_EVENগোলাকার।

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


4
+1 আমরা সিদ্ধান্ত নিয়েছি যে কোনও ধারক শ্রেণিও মুদ্রা গ্রহণ করে। টেবিলগুলিতে আর্থিক মানগুলি সরবরাহ করার সময় এটি কার্যকর হয়।
ড্যানিয়েল হিলার

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

4
আপনার নিজের ঘূর্ণায়মান কেন একটি খারাপ উত্তর, @ninesided একটি দুর্দান্ত উদাহরণ দেয়। "ওহ, যাইহোক, এটি UR CURRENCY_X এর জন্য কাজ করে না।" এটি একটি ভাল চিহ্ন যে এটি অন্যান্য প্রচুর মুদ্রার জন্যও কাজ করে না।
জেমস মুর

4
@ জামেসমুর আমি একমত নই যে "আপনার নিজের ঘূর্ণায়মান" একটি খারাপ দৃষ্টিভঙ্গি, আপনার চয়ন করা পদ্ধতির সম্ভাব্য সীমাবদ্ধতা সম্পর্কে আপনাকে কেবল সচেতন হওয়া দরকার, সুতরাং আমার উল্লেখ করার কারণটি এই কারণটি। মুদ্রা অনুযায়ী বিভিন্ন রাউন্ডিং বিধিগুলি প্রয়োগ করা তুচ্ছ, তবে যদি আপনার সিস্টেমে কেবল মার্কিন ডলার বা EUR ডিল করতে হয় তবে আপনার ইঞ্জিনিয়ার জিনিসগুলির ওভার করার প্রয়োজন হবে না।
14

4
কটাক্ষপাত stackoverflow.com/questions/5134237/... মাত্র এক কারণে BigDecimal একটি সমস্যা জন্য। প্ল্যানেট-ওয়াইড অ্যাকাউন্টিং হ'ল বিশেষ কেসগুলির একটি জলাবদ্ধতা, এবং বিগডেসিমালকে জড়িয়ে রাখার চেষ্টা করা ঠিক কাজ করে না।
জেমস মুর

52

জোদামনি সম্পর্কে জানতে সার্চ ইঞ্জিন দ্বারা এখানে আগত লোকদের জন্য এটি কার্যকর হতে পারে: http://www.joda.org/joda-money/


ধন্যবাদ আমি জোদা মানি সম্পর্কে ফলো-আপ নোট যুক্ত করার অর্থ করছি। আপনি এটি ব্যবহার করেছেন?
10'7

4
+1 আকর্ষণীয় দেখায়, BigDecimalহুডের নীচে এটি দেখে আনন্দিত !
14-21 এ ninesided


8

একটি সুবিধাজনক লাইব্রেরি যা আমি আগে গিয়েছিলাম তা হ'ল জোডা-মানি লাইব্রেরি। এর একটি বাস্তবায়ন বিগডিসিমালের উপর ভিত্তি করে imal এটি মুদ্রাগুলির জন্য আইএসও -২২১17 স্পেসিফিকেশনের উপর ভিত্তি করে এবং কাস্টমাইজড মুদ্রা তালিকার (সিভিএসের মাধ্যমে লোড হওয়া) সমর্থন করতে পারে।

এই লাইব্রেরিতে সংক্ষিপ্ত সংখ্যক ফাইল রয়েছে যা পরিবর্তনগুলির প্রয়োজন হলে দ্রুত যেতে পারে। জোদা-মানি অ্যাপাচি ২.০ লাইসেন্সের আওতায় প্রকাশিত হয়েছে।


7

যদি আপনি কেবল ডলার এবং সেন্ট ব্যবহার করেন তবে আমি একটি দীর্ঘ ব্যবহার করব (2 দশমিক জায়গায় অফসেট)। আপনার যদি আরও বিশদ প্রয়োজন হয় তবে বড় দশমিক হ'ল উপায়।

যে কোনও উপায়ে, আমি সম্ভবত ক্লাসটি প্রসারিত করে একটি টু স্ট্রিং () যা সঠিক ফর্ম্যাট ব্যবহার করে এবং অন্য যে পদ্ধতিগুলি আসতে পারে সেগুলি রাখার জায়গা হিসাবে (দীর্ঘকাল ধরে, গুণ করা এবং ভাগ করা দশমিক নয়, তবে উদ্বেগজনক হবে) সমন্বয় করা হবে না)

এছাড়াও, আপনি যদি নিজের শ্রেণি এবং ইন্টারফেসটি সংজ্ঞায়িত করেন তবে আপনি ইচ্ছায় বাস্তবায়নটি প্রতিস্থাপন করতে পারেন।


4
নজর রাখুন, সেন্টে মার্কিন ফেডারাল tণ ধরে রাখার জন্য এমনকি দীর্ঘও হতে পারে ... যদি না হয় তবে কয়েক বছরে।
ইনগো

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

3

BigDecimal বা অন্য একটি নির্দিষ্ট পয়েন্ট প্রতিনিধিত্ব যা সাধারণত অর্থের জন্য প্রয়োজন is

ভাসমান পয়েন্ট ( Double, Float) উপস্থাপনা এবং গণনাগুলি নির্ভুল, ভ্রান্ত ফলাফলের দিকে পরিচালিত করে।


7
কড়া কথায় বলতে গেলে, বিগডিসিমালও নিখুঁত; এটি আমাদের দৈনন্দিন জীবনে দশমিক রাউন্ডিংয়ের সাথে আরও ভালভাবে মিলিয়ে যায় এবং আপনাকে রাউন্ডিং মোডগুলি নির্দিষ্ট করতে দেয়।
মাইকেল বর্গওয়ার্ট 13

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

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

2

সময় এবং অর্থের সাথে লেনদেন করার সময় আপনাকে এতো যত্নবান হতে হবে।

আপনি যখন অর্থ নিয়ে কাজ করছেন, আমি আশা করি প্রত্যেকের কখনই ভাসা বা ডাবল ব্যবহার করা উচিত নয়।

তবে আমি বিগডিসিমাল সম্পর্কে অনিশ্চিত।

বেশিরভাগ ক্ষেত্রে আপনি যদি ঠিক কোনও সেন্ট বা দীর্ঘ সময় ধরে সেন্ট ট্র্যাক করেন তবে আপনি ভাল থাকবেন। এইভাবে আপনি কোনও দশমিক স্থান নিয়ে কাজ করেন না।

আপনি কেবল এটি মুদ্রণ করলে ডলার প্রদর্শন করবেন। সর্বদা পূর্ণসংখ্যার সাহায্যে অভ্যন্তরীণ সেন্টগুলির সাথে কাজ করুন। বিভক্ত করার প্রয়োজন হলে বা ম্যাথ.এবস () ব্যবহার করার প্রয়োজন হলে এটি জটিল হতে পারে।

তবে আপনি যত্ন নিতে পারেন অর্ধ শতাংশ, এমনকি শতভাগের এক শততমও। আমি জানি না এটি করার ভাল উপায় কী। আপনার কেবল হাজারতম সেন্ট নিয়ে কাজ করতে হবে এবং একটি দীর্ঘ ব্যবহার করতে হবে। অথবা হতে পারে আপনি বিগডিসিমাল ব্যবহার করতে বাধ্য হবেন

আমি এটিতে আরও অনেক বেশি পড়তে চাই, তবে অর্থের প্রতিনিধিত্ব করতে কোনও ফ্লোট বা ডাবল ব্যবহারের বিষয়ে কথা বলতে শুরু করা প্রত্যেককে উপেক্ষা করুন। তারা কেবল ঝামেলা চাইছে।

আমি অনুভব করি আমার পরামর্শ সম্পূর্ণ নয়, সুতরাং দয়া করে এতে আরও কিছু দিন। আপনি বিপজ্জনক ধরণের সাথে লেনদেন করছেন!


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

4
@ মিশেলবার্গওয়ার্ড: হ্যাঁ, এটি আপনাকে মুদ্রার জন্য প্রয়োজনীয় গোলাকার মোডগুলির একটি ক্ষুদ্র উপসেট নির্দিষ্ট করার অনুমতি দেয়। তাহলে? (ইঙ্গিত:। মুদ্রায় rounding সিদ্ধান্ত নেওয়া হয়, সাধারণত, জাতীয় অ্যাকাউন্টিং সংগঠন দ্বারা তারা পুরোপুরি অদ্ভুত বিশেষ ক্ষেত্রে টসে খুশি দেখুন। Stackoverflow.com/questions/5134237/... কেন BigDecimal রাউন্ডইং সম্পূর্ণরূপে ঠিক অনেক রসাল একটা কারণ অকেজো এখানে))
জেমস মুর

@ জেমস: এটি "অকেজো" ঠিক কীভাবে? বিগডিসিমালের সাথে অন্য কোনও কিছুর চেয়ে কী কী বিশেষ সমস্যাগুলি আরও কার্যকর হতে পারে?
মাইকেল বর্গওয়ার্ট

4
ঠিক আছে, সম্পূর্ণ অকেজো খুব শক্ত। মুদ্রা বিমোহিতকারী জটিল শ্রেণিতে, বিগডিসিমালের রাউন্ডিং বিধিগুলি মুদ্রার বৃত্তাকারীকরণের উপায়গুলির একটি উপসেট তৈরির জন্য নির্দিষ্ট কিছু ক্ষেত্রে সম্ভবত কার্যকর। তবে সাধারণ ক্ষেত্রে হ'ল মুদ্রার জন্য বিধিবিধানের নিয়মগুলির মধ্যে এমন ব্যবস্থাগুলি প্রয়োজন যা সময়ের সাথে সাথে পরিবর্তিত হতে পারে (যেহেতু মানব অ্যাকাউন্টিং এজেন্সিগুলি নিয়মগুলি তৈরি করে, এবং সেগুলি পরিবর্তন করতে মুক্ত)। প্রশ্নটি ইউরো (বা যা আগামী মাসে ইউরো প্রতিস্থাপন করে ...) বা 2011 সালে ডলার নিয়ে নয়, এটি মুদ্রার বিষয়ে, সুতরাং আপনাকে প্রচুর দুষ্টু জটিলতার সাথে মোকাবিলা করতে হবে।
জেমস মুর

2

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

দুর্ভাগ্যক্রমে অপারেটর ওভারলোডিং ছাড়াই জাভা এ জাতীয় প্রাথমিক ধরণের তৈরি করা বেশ অপ্রীতিকর করে তোলে।


2

একটি আরও ভাল গ্রন্থাগার আছে, সময়সম্পর্কিত । আইএমও, এই 2 টি ধারণাকে উপস্থাপনের জন্য জেডিকে সরবরাহিত লাইব্রেরিগুলির তুলনায় এটি অনেক উন্নত।


4
এই উত্তরটি তিন বছর আগে পোস্ট করা হয়েছিল। আজ, সময়সূত্র প্রকল্পটি এখনও সেই লিঙ্ক অনুসারে প্রাক-আলফা।
জেমস মুর

4
@ জামেসমুর শুভ কল উত্তরটি এখন 7 বছরের পুরানো এবং প্রকল্পটি এখনও স্থিতিশীল নয়।
নবীন

1

অবশ্যই বিগডিসিমাল নয়। রাউন্ডিং এবং উপস্থাপনার জন্য অনেকগুলি বিশেষ বিধি রয়েছে যা সম্পর্কে আপনাকে চিন্তিত হতে হবে।

মার্টিন ফাউলর মুদ্রার পরিমাণ উপস্থাপনের জন্য একটি নিবেদিত মানি ক্লাস প্রয়োগের পরামর্শ দেয় এবং এটি মুদ্রা রূপান্তরের নিয়মও প্রয়োগ করে।


6
এবং তার মানি ক্লাসের অন্তর্নিহিত ডেটা টাইপ? বিগডিসিমাল।

4
এটা সত্যি না. আপনি মানি ক্লাসে পূর্ণসংখ্যা ব্যবহার করতে পারেন যা মার্টিন যা করে। আমি অনেকবার এটি করেছি।
এগারোয়ারি

সুপারিশ যদিও সঠিক; অর্থের সাথে জড়িত গণনাগুলি হ'ল বিশেষ ক্ষেত্রে একটি বিশাল জলাবদ্ধতা যা সময়ের সাথে সাথে পরিবর্তিত হয়। বিগডিসিমাল সমাধানের ক্ষুদ্র অংশ হিসাবে কার্যকর হতে পারে তবে এটি অবশ্যই সাধারণ নয়।
জেমস মুর

1

আরে, এখানে বিগডিসিমালের একটি খুব আকর্ষণীয় নিবন্ধ এবং কেন কখনও কখনও এটি ডাবলগুলির পরিবর্তে ব্যবহৃত হয় তার একটি চিত্রণমূলক উদাহরণ। বিগডিসিমাল টিউটোরিয়াল


0

শেষ পর্যন্ত কোনও মুদ্রার মান প্রদর্শন করার সময় আপনি ডেসিমালফর্ম্যাট ক্লাসটি ব্যবহার করতে পারেন। এটি স্থানীয়করণ সহায়তা সরবরাহ করে এবং এটি বেশ এক্সটেনসিবল।


0

আমি বিগডিসিমালকে মানি ক্লাসে এমপ্যাপুলেট করব যেটিতে কারও উপরে একটি মুদ্রা রয়েছে যেমন উপরে বর্ণিত আছে। গুরুত্বপূর্ণ বিষয়টি হল আপনি একক পরিমাণে ইউনিট পরীক্ষা করেন এবং বিশেষত যদি বিভিন্ন মুদ্রার সাথে কাজ করেন। এছাড়াও যদি আপনি কোনও দৃin়প্রতিজ্ঞ কন্সট্রাক্টর যুক্ত করেন যা স্ট্রিং বা কারখানার পদ্ধতি গ্রহণ করে যাতে আপনি নিজের পরীক্ষাগুলি এই জাতীয় কিছু লিখতে পারেন তবে তা যুক্ত করুন:

   assertEquals(Money.create("100.0 USD").add("10 GBP"),Money.create("116 USD"));

0

সর্বদা জড়িত সীমাবদ্ধতা এবং নির্দিষ্টকরণ রয়েছে। নিম্নলিখিত নিবন্ধে বর্ণিত সূক্ষ্ম বিষয়গুলির প্রশংসা করার জন্য পর্যাপ্ত অভিজ্ঞতাহীন যে কোনও ব্যক্তির বাস্তব-বিশ্ব আর্থিক তথ্য নিয়ে কাজ করার আগে গুরুত্ব সহকারে পুনর্বিবেচনা করা উচিত:

http://lemnik.wordpress.com/2011/03/25/bigdecimal-and-your-money

বিগডিসিমাল কেবলমাত্র সঠিক প্রতিনিধিত্ব বা ধাঁধাটির একমাত্র অংশ। নির্দিষ্ট শর্ত দেওয়া হয়েছে, একটি পূর্ণসংখ্যা হিসাবে সঞ্চিত সেন্ট দ্বারা সমর্থিত মানি ক্লাস ব্যবহার করা যথেষ্ট হতে পারে এবং বিগডিসিমালের চেয়ে অনেক দ্রুত হবে। হ্যাঁ, এটি মুদ্রা এবং সীমাবদ্ধতার পরিমাণ হিসাবে ডলারের ব্যবহারকে বোঝায় তবে এই জাতীয় সীমাবদ্ধতা অনেকগুলি ব্যবহারের ক্ষেত্রে পুরোপুরি গ্রহণযোগ্য এবং সমস্ত মুদ্রার যে কোনওভাবেই রাউন্ডিং এবং সাব-ডিনোমিনেশনগুলির জন্য বিশেষ মামলা রয়েছে, সুতরাং কোনও "সার্বজনীন" সমাধান নেই।


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