Я работаю над небольшим проектом 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
Любая помощьбыть действительно ценным это.Заранее спасибо.