浮点数转为字符串时,干掉小数后面多余的0

This commit is contained in:
nnhy 2016-09-15 09:55:45 +00:00
parent 2acfc0dfc4
commit a25190cdcb
1 changed files with 31 additions and 9 deletions

View File

@ -16,7 +16,7 @@ extern char* itoa(int value, char* string, int radix);
extern char* ltoa(Int64 value, char* string, int radix);
extern char* utoa(uint value, char* string, int radix);
extern char* ultoa(UInt64 value, char* string, int radix);
char* dtostrf(double val, char width, byte prec, char* sout);
char* dtostrf(double val, byte prec, char* sout);
/******************************** String ********************************/
@ -470,18 +470,34 @@ bool String::Concat(UInt64 num, int radix)
return Concat(buf, strlen(buf));
}
char* ftoa(char* str, double num)
{
int len = sprintf(str, "%.8f", num);
// 干掉后面多余的0
for(int i=len; i>=0; i--)
{
if(str[i] == '0') str[i] = '\0';
}
return str;
}
bool String::Concat(float num, int decimalPlaces)
{
char buf[20];
auto string = dtostrf(num, (decimalPlaces + 2), decimalPlaces, buf);
return Concat(string, strlen(string));
dtostrf(num, decimalPlaces, buf);
//sprintf(buf, "%f", num);
//ftoa(buf, num);
return Concat(buf, strlen(buf));
}
bool String::Concat(double num, int decimalPlaces)
{
char buf[20];
auto string = dtostrf(num, (decimalPlaces + 2), decimalPlaces, buf);
return Concat(string, strlen(string));
dtostrf(num, decimalPlaces, buf);
//sprintf(buf, "%f", num);
//ftoa(buf, num);
return Concat(buf, strlen(buf));
}
String& operator + (String& lhs, const Object& rhs)
@ -1118,13 +1134,19 @@ extern char* ultoa(UInt64 value, char* string, int radix)
return string;
}
char *dtostrf (double val, char width, byte prec, char* sout)
char *dtostrf (double val, byte prec, char* str)
{
char fmt[20];
sprintf(fmt, "%%%d.%df", width, prec);
sprintf(sout, fmt, val);
sprintf(fmt, "%%.%df", prec);
int len = sprintf(str, fmt, val);
return sout;
// 干掉后面多余的0
for(int i=len; i>=0; i--)
{
if(str[i] == '0') str[i] = '\0';
}
return str;
}
/******************************** StringSplit ********************************/