MCPcopy Create free account
hub / github.com/alliedmodders/sourcemod / AddFloat

Function AddFloat

core/logic/sprintf.cpp:253–385  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

251}
252
253void AddFloat(char **buf_p, size_t &maxlen, double fval, int width, int prec, int flags)
254{
255 int digits; // non-fraction part digits
256 double tmp; // temporary
257 char *buf = *buf_p; // output buffer pointer
258 int val; // temporary
259 int sign = 0; // 0: positive, 1: negative
260 int fieldlength; // for padding
261 int significant_digits = 0; // number of significant digits written
262 const int MAX_SIGNIFICANT_DIGITS = 16;
263
264 if (ke::IsNaN(fval))
265 {
266 AddString(buf_p, maxlen, "NaN", width, prec, flags | NOESCAPE);
267 return;
268 }
269
270 if (ke::IsInfinite(static_cast<float>(fval)))
271 {
272 const char *str = ((fval < 0) ? "-Inf" : "Inf");
273 AddString(buf_p, maxlen, str, width, prec, flags | NOESCAPE);
274 return;
275 }
276
277 // default precision
278 if (prec < 0)
279 {
280 prec = 6;
281 }
282
283 // get the sign
284 if (fval < 0)
285 {
286 fval = -fval;
287 sign = 1;
288 }
289
290 // compute whole-part digits count
291 digits = (int)log10(fval) + 1;
292
293 // Only print 0.something if 0 < fval < 1
294 if (digits < 1)
295 {
296 digits = 1;
297 }
298
299 // compute the field length
300 fieldlength = digits + prec + ((prec > 0) ? 1 : 0) + sign;
301
302 // minus sign BEFORE left padding if padding with zeros
303 if (sign && maxlen && (flags & ZEROPAD))
304 {
305 *buf++ = '-';
306 maxlen--;
307 }
308
309 // right justify if required
310 if ((flags & LADJUST) == 0)

Callers 2

gnprintfFunction · 0.85
atcprintfFunction · 0.85

Calls 1

AddStringFunction · 0.85

Tested by

no test coverage detected