Десятичный тип в Qt (C++)

какой правильный тип использовать в разработке Qt (или C++ в целом) для десятичной арифметики, т. е. эквивалент System.Decimal struct в .Нет?

  • предоставляет ли Qt встроенную структуру? (Я не могу найти его в документах, но, возможно, не знаю, где искать.)
  • есть ли "стандартная" библиотека C++ для использования?

5 ответов


какой правильный тип использовать в Qt разработка (или C++ в целом) для десятичная арифметика, т. е. эквивалент системы.Десятичные struct в .Нет?

ни стандартная библиотека C++, ни Qt не имеют типа данных, эквивалентного System.Decimal in .Сеть.

предоставляет ли Qt встроенную структуру? (Я не могу найти его в документах, но может быть не знаю, где искать.)

нет.

есть "стандартная" библиотека C++ для использовать?

нет.

но вы, возможно, захотите взглянуть на GNU Multiple Precision Arithmetic Library.

[EDIT:] лучшим выбором, чем вышеуказанная библиотека, может быть qdecimal. Он обертывает десятичный float, совместимый с IEEE, который очень похож (но не совсем такой же, как) на .NET decimal, а также использует идиомы и практики Qt.


в C++ нет десятичного типа, и, насколько мне известно, Qt также не предоставляет его. В зависимости от вашего диапазона значений, достойным решением может быть просто использовать unsigned int и разделить / умножить на десять при отображении.

например, если мы говорим о долларах, вы могли бы сделать это:

unsigned int d = 100; // 1 dollar, basically d holds cents here...

или если вы хотите 3 десятичных знака и хотите сохранить 123.456

unsigned int x = 123456; и просто сделать некоторые просто математику, когда отображение:

printf("%u.%u\n", x / 1000, x % 1000);



быстрый поиск показывает, что gcc может поддерживать десятичные дроби directlyand, что гораздо более общая информация доступна, например,http://speleotrove.com/decimal/


существует также реализация на C, доступная из IBM:http://www.alphaworks.ibm.com/tech/decNumber