Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

Классы из Decimal TR не реализованы для всех компиляторов. Некоторые компиляторы, например gcc, реализуют C Decimal TR и предоставить соответствующие расширения в С++. Раньше существовала реализация с открытым исходным кодом для С++ Decimal TR, но я не смог ее найти. Если ваш компилятор не поддерживает десятичные типы, лучшим вариантом является создание обертки для IBM библиотека decNumber.

Чтобы улучшить ситуацию в будущем на С++, я создал план обновления TR, и я собираюсь включить текущий TR в полное предложение, готовое к следующему совещанию комитета С++ (в апреле в Бристоле), пытаясь принять его в стандарт С++, возможно, в версию, запланированную на 2014 год. Реализация, которая у меня есть, является частью моей обычной работы, и она не является я не могу решить, может ли он быть доступен публично, хотя есть надежда, что в какой-то момент его можно будет открыть.

Ответ 2

Вы можете использовать простое в использовании решение только для заголовков для С++ с шаблонами: https://github.com/vpiotr/decimal_for_cpp

Обратите внимание, что это не класс * 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"

Ответ 3

используйте int32 или int64 и (вручную) сдвиньте десятичную точку туда, где вы хотите. Если вы измеряете доллары, например, просто измеряйте центы и отображаете значение по-разному. простой!