सारांश:
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, -2 में 3।
हमें (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
तो, पाइरो के जवाब का उपयोग करें!