Полю присваивается не то значение!

95
03 сентября 2019, 01:40

Есть класс Money:

class Money
{
private:
    unsigned long rouble;
    unsigned char penny;};

Есть конструктор:

Money::Money(const double money)
{
    double intpart;
    double frac = modf(money, &intpart);
    if (intpart < 0) {
        ok = false;
    }
    while (frac > 100)
    {
        frac--;
        intpart += 1;
    }
    penny = static_cast<unsigned long>(deleteDot(frac));
    rouble = static_cast<unsigned long>(intpart);
}

При передаче допустим 1.2232, выдаёт 1,184. Прошёлся отладчиком, но таки не понял почему так происходит.

Метод deleteDot:

double Money::deleteDot(double &frac)
{
    int x, value = 10;
    std::stringstream ss;
    std::string ncbc; //numeral_count_before_comma
    rouble = (int)frac;
    ss << frac - (int)frac; //1.12-1=0.12
    ncbc = ss.str();
    size_t pos = ncbc.find('.');
    if (pos != ncbc.npos)
    {
        x = ncbc.size() - 1 - pos;
    }
    for (int i = 1; i < x; i++)
    {
        value *= 10;
    }
    frac -= (int)frac;
    frac *= value;
    return frac;
}
Answer 1

В этом как раз никакой загадки.

Для 1.2232 ваша функция deleteDot возвращает 2232, каковое число при преобразовании в ungigned char (хотя вы и пишете unsigned long)

penny = static_cast<unsigned long>(deleteDot(frac));

обрезается до 184.

Как правильно написать deleteDot, вы не спрашивали :)

Но намекну - берите дробную часть, не пытайтесь работать со строковым представлением. Умножайте на 100 и округляйте до целого так, как вам нужно.

READ ALSO
Передать сигнал и слот QT как параметр

Передать сигнал и слот QT как параметр

Есть библиотека которая общается с устройством либо через usb, либо через ethernet, либо еще через что тоИ хотелось бы что бы передать в конструктор...

99
Задать время для перехода на следующий Activity

Задать время для перехода на следующий Activity

Подскажите, как задать время для перехода на следующий ActivityОбъясню для чего

110
Как запустить spring сервер из тестов?

Как запустить spring сервер из тестов?

Есть в тесте такой кусок кодаРаботает только, если само приложение было запущено ранее

119
Аннотация для выводов логов методов при помощи прокси

Аннотация для выводов логов методов при помощи прокси

Как создать аннотацию, которая выводила бы логи для любого метода, при помощи прокси

113