সারসংক্ষেপ:
double roundit(double num, double N)
{
double d = log10(num);
double power;
if (num > 0)
{
d = ceil(d);
power = -(d-N);
}
else
{
d = floor(d);
power = -(d-N);
}
return (int)(num * pow(10.0, power) + 0.5) * pow(10.0, -power);
}
সুতরাং আপনাকে প্রথম অ-শূন্য অঙ্কের দশমিক স্থান খুঁজে বের করতে হবে, তারপরে পরবর্তী এন -1 অঙ্কগুলি সংরক্ষণ করুন, তারপরে বাকীগুলির উপর ভিত্তি করে নবম সংখ্যাটি বৃত্তাকার করুন।
আমরা প্রথমে লগ ব্যবহার করতে পারি।
log 1239451 = 6.09
log 12.1257 = 1.08
log 0.0681 = -1.16
সুতরাং সংখ্যার জন্য> 0, লগের সিলটি নিন। <0 সংখ্যার জন্য, লগের ফ্লোর নিন।
এখন আমাদের সংখ্যাটি রয়েছে d
: প্রথম ক্ষেত্রে 7, 2 য় 2, 3 য় -2।
আমাদের (d-N)
তম সংখ্যাটি গোল করতে হবে । কিছুটা এইরকম:
double roundedrest = num * pow(10, -(d-N));
pow(1239451, -4) = 123.9451
pow(12.1257, 1) = 121.257
pow(0.0681, 4) = 681
তারপরে স্ট্যান্ডার্ড রাউন্ডিং জিনিসটি করুন:
roundedrest = (int)(roundedrest + 0.5);
এবং পাও পূর্বাবস্থায় ফেরা।
roundednum = pow(roundedrest, -(power))
যেখানে শক্তি উপরের শক্তি গণনা করা হয়।
নির্ভুলতা সম্পর্কে: পাইরোলিস্টিকালের উত্তর সত্যিকারের ফলাফলের কাছাকাছি। তবে মনে রাখবেন যে আপনি কোনও অবস্থাতেই 12.1 উপস্থাপন করতে পারবেন না। যদি আপনি উত্তরগুলি নিম্নরূপে মুদ্রণ করেন:
System.out.println(new BigDecimal(n));
উত্তরগুলি হ'ল:
Pyro's: 12.0999999999999996447286321199499070644378662109375
Mine: 12.10000000000000142108547152020037174224853515625
Printing 12.1 directly: 12.0999999999999996447286321199499070644378662109375
সুতরাং, পাইরো এর উত্তর ব্যবহার করুন!