У меня есть этот статический метод, он получает двойной и «разрезает» его дробный хвост, оставляя две цифры после точки. работы почти все время. Я заметил, что когда получает 2,3, он превращает его в 2.29. Этого не происходит для 0,3, 1,3, 3,3, 4,3 и 102,3. Код в основном умножает число на 100 использует modf делит целочисленное значение на 100 и возвращает его. Вот код ловит этот один конкретный номер и печатает:modf возвращает 1 как дробное:
static double dRound(double number) {
bool c = false;
if (number == 2.3)
c = true;
int factor = pow(10, 2);
number *= factor;
if (c) {
cout << " number *= factor : " << number << endl;
//number = 230;// When this is not marked as comment the code works well.
}
double returnVal;
if (c){
cout << " fractional : " << modf(number, &returnVal) << endl;
cout << " integer : " <<returnVal << endl;
}
modf(number, &returnVal);
return returnVal/factor;
}
он печатает:
число * = коэффициент: 230
дробно: 1
целое число: 229
Кто-нибудь знает, почему это происходит, и как я могу это исправить? Спасибо, и у вас отличный выходной.
Так есть лучший способ «отрезать» этот хвост и оставить только первые 2 цифры после запятой без округления? – Matti
@Matti: См. Обновление. – kennytm