C ++ десятичные типы данных

Есть ли способ использовать десятичные типы данных, такие как decimal32 , decimal64 или decimal128 в моих программах на C ++?

Классы из 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 и (вручную) сдвиньте десятичную точку туда, где вы хотите. Если вы измеряете доллары, например, просто измеряйте центы и отображаете значение по-разному. просто!

  • Почему «f» требуется при объявлении float?
  • Манипулирование и сравнение плавающих точек в java
  • Какие типы чисел представляются в двоичной с плавающей запятой?
  • Почему значение с плавающей запятой, такое как 3.14, по умолчанию считается в MSVC?
  • Получение фактической ширины элемента с плавающей запятой
  • Как изменить поплавок на наименьший приращение (или близко к нему)?
  • поплавковые биты и строгий псевдоним
  • Странное поведение при приведении float в int в C #
  • Могу ли я заставить gcc сказать мне, когда вычисление приводит к NaN или inf во время выполнения?
  • Когда следует использовать ключевое слово "strictfp" в java?
  • Как разобрать строку на float или int в Python?
  • Давайте будем гением компьютера.