64,647
社区成员
发帖
与我相关
我的任务
分享
const char intTable[]={'0','1', '2', '3', '4', '5', '6', '7', '8', '9'};
CString IntToString(long long int value)
{
char result[32];
memset(result, 0, 32);
long long int n = value, m = 0;
int idx = 0;
do
{
m = n%10;
n = n/10;
result[idx]=intTable[m];
idx++;
} while (n!=0);
int nLen = strlen(result);
for(int i = 0; i < nLen/2; i++)
{
char tmp = result[nLen-i-1];
result[nLen-i-1] = result[i];
result[i] = tmp;
}
return CString(result);
}
template<class T>
CString DoubleToString(T value, int precise=sizeof(T)==4?6:15)
{
long long int intValue=value;
CString intPart = IntToString(intValue);
intPart.TrimRight('0');
precise -= intPart.GetLength();
if(precise <= 0)
{
return intPart;
}
if (intPart.IsEmpty())
{
intPart.Insert(0, '0');
}
long long int preciseValue = 1;
for(int i = 0; i <= precise; i++)
{
preciseValue *= 10;
}
intValue = (value-intValue)*preciseValue;
intValue = (intValue%10>=5)?(intValue/10+1):(intValue/10);
CString doublePart = IntToString(intValue);
for(int i = 0; i < precise-doublePart.GetLength(); i++)
{
doublePart.Insert(0, '0');
}
doublePart.TrimRight('0');
if(doublePart.GetLength() > 0)
{
intPart+=".";
if(doublePart.GetLength()>precise)
{
intPart+=doublePart.Left(precise);
}
else
{
intPart+=doublePart;
}
}
return intPart;
}