C ++ десятичные типы данных
Есть ли способ использовать десятичные типы данных, такие как decimal32
, decimal64
или decimal128
в моих программах на C ++?
- Выдача результата для float в методе, возвращающем результат изменения float
- Есть ли функция для округления поплавка на C или мне нужно написать собственное?
- сравнение значений float / double с использованием оператора ==
- C #: преобразовать массив байтов в float
- Почему изменение 0.1f to 0 замедляет производительность на 10x?
- Float и двойной тип данных в Java
- Могут ли какие-либо процессоры реального мира не использовать IEEE 754?
- Двойной расчет, создающий нечетный результат
Классы из Decimal TR не реализованы для всех компиляторов. Некоторые компиляторы, например, gcc , реализуют C-Decimal TR и предоставляют соответствующие расширения в C ++. Раньше существовала реализация с открытым исходным кодом для C ++ Decimal TR, но я не смог ее найти. Если ваш компилятор не поддерживает десятичные типы, лучшим вариантом является создание обертки для библиотеки decNumber IBM.
Чтобы улучшить ситуацию в будущем на C ++, я создал план по обновлению TR, и я собираюсь превратить текущий TR в готовое предложение, готовое к следующей сессии комитета C ++ (в апреле в Бристоле), пытаясь получить он был принят в стандарт C ++, возможно, в пересмотре, запланированном на 2014 год. Реализация, которую я имею, является частью моей обычной работы, и мне не решить, можно ли ее публиковать, хотя есть надежда, что она могут быть открыты в какой-то момент.
Вы можете использовать простое в использовании решение только для заголовков для C ++ с шаблонами: https://github.com/vpiotr/decimal_for_cpp
Обратите внимание, что это не class * Big * Decimal; он ограничен цифрами «мантиссы» размером в 64 бита.
[взято из ссылки]
#include "decimal.h" using namespace dec; // the following declares currency variable with 2 decimal points // initialized with integer value (can be also floating-point) decimal<2> value(143125); // to use non-decimal constants you need to convert them to decimal value = value / decimal_cast<2>(333.0); // output values cout << "Result is: " << value << endl; // this should display something like "429.80" // to mix decimals with different precision use decimal_cast decimal<6> exchangeRate(12.1234); value = decimal_cast<2>(decimal_cast<6>(value) * exchangeRate); cout << "Result 2 is: " << value << endl; // this should display something like "5210.64" cout << "Result 2<6> is: " << decimal_cast<6>(value) << endl; // this should display something like "5210.640000"
используйте int32 или int64 и (вручную) сдвиньте десятичную точку туда, где вы хотите. Если вы измеряете доллары, например, просто измеряйте центы и отображаете значение по-разному. просто!