forked from espressif/arduino-esp32
@ -112,16 +112,28 @@ String::String(unsigned long value, unsigned char base) {
|
|||||||
*this = buf;
|
*this = buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
String::String(float value, unsigned char decimalPlaces) {
|
String::String(float value, unsigned int decimalPlaces) {
|
||||||
init();
|
init();
|
||||||
char buf[33];
|
char *buf = (char*)malloc(decimalPlaces + 42);
|
||||||
*this = dtostrf(value, (decimalPlaces + 2), decimalPlaces, buf);
|
if (buf) {
|
||||||
|
*this = dtostrf(value, (decimalPlaces + 2), decimalPlaces, buf);
|
||||||
|
free(buf);
|
||||||
|
} else {
|
||||||
|
*this = "nan";
|
||||||
|
log_e("No enought memory for the operation.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String::String(double value, unsigned char decimalPlaces) {
|
String::String(double value, unsigned int decimalPlaces) {
|
||||||
init();
|
init();
|
||||||
char buf[33];
|
char *buf = (char*)malloc(decimalPlaces + 312);
|
||||||
*this = dtostrf(value, (decimalPlaces + 2), decimalPlaces, buf);
|
if (buf) {
|
||||||
|
*this = dtostrf(value, (decimalPlaces + 2), decimalPlaces, buf);
|
||||||
|
free(buf);
|
||||||
|
} else {
|
||||||
|
*this = "nan";
|
||||||
|
log_e("No enought memory for the operation.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String::~String() {
|
String::~String() {
|
||||||
|
@ -71,8 +71,8 @@ class String {
|
|||||||
explicit String(unsigned int, unsigned char base = 10);
|
explicit String(unsigned int, unsigned char base = 10);
|
||||||
explicit String(long, unsigned char base = 10);
|
explicit String(long, unsigned char base = 10);
|
||||||
explicit String(unsigned long, unsigned char base = 10);
|
explicit String(unsigned long, unsigned char base = 10);
|
||||||
explicit String(float, unsigned char decimalPlaces = 2);
|
explicit String(float, unsigned int decimalPlaces = 2);
|
||||||
explicit String(double, unsigned char decimalPlaces = 2);
|
explicit String(double, unsigned int decimalPlaces = 2);
|
||||||
~String(void);
|
~String(void);
|
||||||
|
|
||||||
// memory management
|
// memory management
|
||||||
|
@ -88,7 +88,7 @@ char* ultoa(unsigned long value, char* result, int base) {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
char * dtostrf(double number, signed char width, unsigned char prec, char *s) {
|
char * dtostrf(double number, signed int width, unsigned int prec, char *s) {
|
||||||
bool negative = false;
|
bool negative = false;
|
||||||
|
|
||||||
if (isnan(number)) {
|
if (isnan(number)) {
|
||||||
@ -117,7 +117,7 @@ char * dtostrf(double number, signed char width, unsigned char prec, char *s) {
|
|||||||
// Round correctly so that print(1.999, 2) prints as "2.00"
|
// Round correctly so that print(1.999, 2) prints as "2.00"
|
||||||
// I optimized out most of the divisions
|
// I optimized out most of the divisions
|
||||||
double rounding = 2.0;
|
double rounding = 2.0;
|
||||||
for (uint8_t i = 0; i < prec; ++i)
|
for (uint32_t i = 0; i < prec; ++i)
|
||||||
rounding *= 10.0;
|
rounding *= 10.0;
|
||||||
rounding = 1.0 / rounding;
|
rounding = 1.0 / rounding;
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ char* utoa (unsigned int val, char *s, int radix);
|
|||||||
|
|
||||||
char* ultoa (unsigned long val, char *s, int radix);
|
char* ultoa (unsigned long val, char *s, int radix);
|
||||||
|
|
||||||
char* dtostrf (double val, signed char width, unsigned char prec, char *s);
|
char* dtostrf (double val, signed int width, unsigned int prec, char *s);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} // extern "C"
|
} // extern "C"
|
||||||
|
Reference in New Issue
Block a user