আপনি নিজের মুদ্রাকে সঞ্চয় করতে longএবং কমপক্ষে ব্যাকআপ হিসাবে নিজের মুদ্রার গণনা করতে চান double। আপনি চান যে সমস্ত লেনদেন যেমন হয় long।
আপনি longযেভাবে আপনার মুদ্রা সঞ্চয় করতে চান তা হ'ল আপনি কোনও মুদ্রা হারাতে চান না।
ধরা যাক আপনি একটি ব্যবহার করেন double, এবং আপনার কোনও অর্থ নেই। কেউ আপনাকে তিনটি ডাইম দেয় এবং তারপরে সেগুলি আবার নিয়ে যায়।
You: 0.1+0.1+0.1-0.1-0.1-0.1 = 2.7755575615628914E-17
ঠিক আছে, এটি এত সুন্দর নয়। হতে পারে যে 10 ডলারযুক্ত কেউ প্রথমে আপনাকে তিনটি ডাইম দিয়ে এবং তারপরে অন্য কাউকে 70 9.70 দিয়ে তাদের ভাগ্য দূরে দিতে চায়।
Them: 10.0-0.1-0.1-0.1-9.7 = 1.7763568394002505E-15
এবং তারপরে আপনি তাদের ডাইমগুলি ফিরিয়ে দিন:
Them: ...+0.1+0.1+0.1 = 0.3000000000000018
এটা ঠিক ভেঙে গেছে।
এখন, আসুন একটি দীর্ঘ ব্যবহার করুন, এবং আমরা দশম সেন্টের ট্র্যাক রাখব (সুতরাং 1 = $ 0.001)। আসুন গ্রহটির প্রত্যেককে এক বিলিয়ন, একশো বারো মিলিয়ন, পঁচাত্তর হাজার, একশত চল্লিশ তিন ডলার:
Us: 7000000000L*1112075143000L = 1 894 569 218 048
উম, অপেক্ষা করুন, আমরা সবাইকে এক বিলিয়ন ডলারেরও বেশি দিতে পারি, এবং কেবল মাত্র দুই'র বেশি ব্যয় করতে পারি? উপচে পড়া এখানে বিপর্যয় is
সুতরাং, যখনই আপনি স্থানান্তর করতে, অর্থ ব্যবহারের জন্য doubleএবং Math.roundএটি পাওয়ার জন্য একটি পরিমাণ অর্থ গণনা করছেন long। তারপর ভারসাম্যকে ঠিক (জুড়তে এবং উভয় অ্যাকাউন্টে বিয়োগ) ব্যবহার করে long।
আপনার অর্থনীতি ফাঁস হবে না এবং এটি এক কোয়াড্রিলিয়ন ডলার পর্যন্ত স্কেল হবে।
আরও জটিল সমস্যা রয়েছে - উদাহরণস্বরূপ, আপনি বিশ টাকা প্রদান করলে আপনি কী করবেন? * - তবে এটি আপনাকে শুরু করা উচিত।
* আপনি গণনা করুন যে এক অর্থ প্রদান কী long; তারপরে গুন করুন 20.0এবং পরীক্ষা করুন যে এটি সীমার মধ্যে রয়েছে; যদি তা হয় তবে 20Lআপনার ভারসাম্য থেকে কেটে নেওয়া পরিমাণ অর্থ প্রদানের মাধ্যমে আপনি পেমেন্টকে গুণাবেন। সাধারণভাবে, সমস্ত লেনদেনকে অবশ্যই পরিচালনা করতে হবে long, সুতরাং আপনাকে ব্যক্তিগতভাবে সমস্ত লেনদেনের যোগফল দিতে হবে; আপনি একটি শর্টকাট হিসাবে গুণ করতে পারেন, তবে আপনাকে নিশ্চিত করতে হবে যে আপনি রাউন্ডিং ত্রুটিগুলি যুক্ত করবেন না এবং আপনি উপচে পড়ছেন না, যার অর্থ doubleসত্যিকারের গণনা করার আগে আপনাকে যাচাই করা উচিত long।