Basit bir kayan nokta yuvarlama fonksiyonuna ihtiyacım var:
double round(double);
round(0.1) = 0
round(-0.1) = 0
round(-0.9) = -1
math.h dosyasında ceil()
ve floor()
işlevlerini bulabiliyorum - ancak round()
işlevini bulamıyorum.
Standart C++ kütüphanesinde başka bir ad altında mevcut mu, yoksa kayıp mı?
C++98 standart kütüphanesinde round() yoktur. Yine de kendiniz bir tane yazabilirsiniz. Aşağıda round-half-up'in bir gerçeklemesi verilmiştir:
double round(double d)
{
return floor(d + 0.5);
}
C++98 standart kütüphanesinde round fonksiyonunun bulunmamasının muhtemel nedeni, aslında bu fonksiyonun farklı şekillerde uygulanabilmesidir. Yukarıdaki yaygın bir yoldur, ancak round-to-even gibi başkaları da vardır, bu daha az önyargılıdır ve çok fazla yuvarlama yapacaksanız genellikle daha iyidir; yine de uygulanması biraz daha karmaşıktır.
Genellikle floor(value + 0.5)
olarak uygulanır.
Düzenleme: ve muhtemelen yuvarlama olarak adlandırılmıyor çünkü benim bildiğim en az üç yuvarlama algoritması var: sıfıra yuvarlama, en yakın tam sayıya yuvarlama ve banker yuvarlama. Siz en yakın tamsayıya yuvarlamayı soruyorsunuz.
Bunu ben yaptım:
#include <cmath.h>
using namespace std;
double roundh(double number, int place){
/* place = decimal point. Putting in 0 will make it round to whole
number. putting in 1 will round to the
tenths digit.
*/
number *= 10^place;
int istack = (int)floor(number);
int out = number-istack;
if (out < 0.5){
floor(number);
number /= 10^place;
return number;
}
if (out > 0.4) {
ceil(number);
number /= 10^place;
return number;
}
}