Округление данных при помещении в поток.
|
|
Вторник, 26 Января 2021 г. 18:09
+ в цитатник
Сергей85:
#include
#include "sstream.h" //^E^i'i^aad`o`a"o`e"y String ^a Long Double.
AnsiString asLongDouble_To_String(long double ldValue) //^E^i'i^aad`o`a"o`e"y long double ^a^ic`i^iae'i`a `o^i"e"u^e^i :adac "i^i`o^i^e.
{
stringstream sStream;
sStream.precision(10000);
sStream << ldValue; //sStream << std::fixed << ldValue; - 'ia d`a'a^i`o`aa`o ~n 'a^i"e"uo`e`i`e :`e~n"e`a`i`e ^a`e"a`a 10^38, `a `o`a^eaea "a^i"i`e~n^u^a`aa`o 6 'i'o"ea'e "i^i~n"ea c`a"i"y`o^i'e.
string sValue = sStream.str();
AnsiString asValue = "";
for (unsigned int i=0; i
return asValue;
}
long double ldString_To_LongDouble(AnsiString asValue) //^E^i'i^aad`o`a"o`e"y long double ^a^ic`i^iae'i`a `o^i"e"u^e^i :adac "i^i`o^i^e.
{
long double ldResult = 0;
string sValue = "";
for (int i=0; idiv>
if (asValue.Pos(DecimalSeparator)==0) sValue.append(DecimalSeparator + "0");
stringstream strStream(sValue);
strStream >> ldResult;
return ldResult;
}
Среда разработки не содержит функций, позволяющих перетипировать Long Double в AnsiString и обратно. Самописные функции же сталкиваются с неправильным преобразованием больших чисел (в т.ч. из-за научного их представления). Например, предел Unsigned Long Long (18446744073709551615) преобразуется как 18446744073709551620 - то есть, происходит переполнение переменной на 5. В связи с этим, максимум для дробных переменных и части больших целочисленных переменных ограничен вручную до +-9223372036854775808.
https://forum.sources.ru/index.php?showtopic=421054&view=findpost&p=3844048
Метки:
Borland C++ Builder/Turbo C++ Explorer
-
Запись понравилась
-
0
Процитировали
-
0
Сохранили
-