@@ -38,6 +38,16 @@ class String: public string
38
38
return 0 <= val ? ret : string (" -" ) + ret;
39
39
}
40
40
41
+ static string dtoas (double val, int decimalPlaces) {
42
+ double r = 0.5 * pow (0.1 , decimalPlaces); // make sure that integer truncation will properly round
43
+ val += val > 0 ? r : -r;
44
+ if (isnan (val)) return " nan" ;
45
+ if (isinf (val)) return " inf" ;
46
+ if (val > 4294967040.0 ) return " ovf" ;
47
+ if (val <-4294967040.0 ) return " ovf" ;
48
+ return mytoas (val, 10 ) + " ." + mytoa (abs (val - (long )val) * pow (10 , decimalPlaces), 10 );
49
+ }
50
+
41
51
public:
42
52
~String (void ) {}
43
53
String (const char *cstr = " " ): string(cstr) {}
@@ -51,10 +61,8 @@ class String: public string
51
61
explicit String (long val, unsigned char base=10 ): string(mytoas(val, base)) {}
52
62
explicit String (unsigned long val, unsigned char base=10 ): string(mytoa(val, base)) {}
53
63
54
- explicit String (float val, unsigned char decimalPlaces=2 ):
55
- string(mytoas(val, 10 ) + "." + mytoa(abs(val - (long )val) * pow(10 , decimalPlaces), 10)) {}
56
- explicit String (double val, unsigned char decimalPlaces=2 ):
57
- string(mytoas(val, 10 ) + "." + mytoa(abs(val - (long )val) * pow(10 , decimalPlaces), 10)) {}
64
+ explicit String (float val, unsigned char decimalPlaces=2 ): string(dtoas(val, decimalPlaces)) {}
65
+ explicit String (double val, unsigned char decimalPlaces=2 ): string(dtoas(val, decimalPlaces)) {}
58
66
59
67
String & operator = (const String &rhs) { assign (rhs); return *this ; }
60
68
String & operator = (const char *cstr) { assign (cstr); return *this ; }
0 commit comments