浮点数转为字符串时,干掉小数后面多余的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* ltoa(Int64 value, char* string, int radix);
extern char* utoa(uint value, char* string, int radix); extern char* utoa(uint value, char* string, int radix);
extern char* ultoa(UInt64 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 ********************************/ /******************************** String ********************************/
@ -470,18 +470,34 @@ bool String::Concat(UInt64 num, int radix)
return Concat(buf, strlen(buf)); 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) bool String::Concat(float num, int decimalPlaces)
{ {
char buf[20]; char buf[20];
auto string = dtostrf(num, (decimalPlaces + 2), decimalPlaces, buf); dtostrf(num, decimalPlaces, buf);
return Concat(string, strlen(string)); //sprintf(buf, "%f", num);
//ftoa(buf, num);
return Concat(buf, strlen(buf));
} }
bool String::Concat(double num, int decimalPlaces) bool String::Concat(double num, int decimalPlaces)
{ {
char buf[20]; char buf[20];
auto string = dtostrf(num, (decimalPlaces + 2), decimalPlaces, buf); dtostrf(num, decimalPlaces, buf);
return Concat(string, strlen(string)); //sprintf(buf, "%f", num);
//ftoa(buf, num);
return Concat(buf, strlen(buf));
} }
String& operator + (String& lhs, const Object& rhs) String& operator + (String& lhs, const Object& rhs)
@ -1118,13 +1134,19 @@ extern char* ultoa(UInt64 value, char* string, int radix)
return string; return string;
} }
char *dtostrf (double val, char width, byte prec, char* sout) char *dtostrf (double val, byte prec, char* str)
{ {
char fmt[20]; char fmt[20];
sprintf(fmt, "%%%d.%df", width, prec); sprintf(fmt, "%%.%df", prec);
sprintf(sout, fmt, val); 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 ********************************/ /******************************** StringSplit ********************************/