Как избежать научной нотации и установить десятичные разряды в библиотеке математических вычислений с плавающей запятой Intel - PullRequest
0 голосов
/ 03 октября 2018

Я работаю над небольшим проектом C ++ с нуля, который манипулирует деньгами.Я новичок в использовании десятичной математической библиотеки Intel с плавающей запятой v2.0u2, и после написания некоторого кода я вижу, что числа с более чем 6 цифрами представлены в научной записи.Я прочитал его документацию и не могу понять, как это изменить.Пример:

#include "bid_conf.h"
#include "bid_functions.h"
...
BID_UINT64 d = __bid64_from_int64(345, round, &flags);
BID_UINT64 e = __bid64_from_int64(10000, round, &flags)
BID_UINT64 f = __bid64_mul(d, e, round, &flags)
cout << f;   // shows 3584865303390364816
cout << __bid64_to_binary64(f, round, &flags); // shows 3.45e+06

Мне нужно получить: 345 * 10000 = 3450000.00 , чтобы сохранить его в базе данных и показать его на пользовательских интерфейсах.

Также, как установить десятичные разряды для значений с плавающей точкой с округлением, я имею в виду:

With 2 decimal places      Actual      Expected
2 / 16 =                   0.125       0.13
1 / 3  =                   0.33333...  0.33
12 + 2 =                   14          14.00
With 4 decimal places      Actual      Expected
2 / 16 =                   0.125       0.1250
1 / 3  =                   0.33333...  0.3333
12 + 2 =                   14          14.0000
13 / 7 =                   1.8571428   1.8571

Также как комментарий каждый раз, когда я использую функцию __ bid64_mul , которую мне нужно установитьпеременные, использующие __ bid64_from_int64 для умножения, в противном случае я всегда получаю ноль в качестве результата, однако для сложения, вычитания и деления проблем нет.

BID_UINT64 a = 345;
BID_UINT64 b = 1000;
BID_UINT64 c = __bid64_add(a, b, round, &flags);
cout << c; // shows 1345 ok

c = __bid64_sub(a, b, round, &flags);
cout << c; // shows 9223372036854776463 
cout << __bid64_abs(c); // shows 655
cout << __bid64_to_binary64(c, round, &flags); // shows -0

c = __bid64_div(a, b, round, &flags);
cout << c; // shows 3557843705622692185
cout << __bid64_to_binary64(c, round, &flags); // shows 0.345, I would like 0.35

c = __bid64_mul(a, b, round, &flags);
cout << c << endl; // shows 0
cout << __bid64_to_binary64(c, round, &flags); // shows 0

Любая помощьбыть действительно ценным это.Заранее спасибо.

...