pure typescript implementation of printf-family with type checking
import { printf } from 'printf-ts';
// Hello printf 1 1.20
printf("Hello %s %d %.2lf", "printf", 1, 1.2)- 1 ~ 2 Returns the result as a string
- 3 ~ 4 Writes the results to the stdout, returns the number of characters printed
- 5 ~ 6 Writes the results to the stdout, returns the number of characters printed. if nodejs, append
\nto the end(not affect to return value)
see cppreference-printf for each description of specifier
- flags:
+,-,,#,0 width,precision- support wildcard(
*)
- support wildcard(
- length modifier:
h,hh,l,ll,L,j,z,t - conversion specifier:
%c,%s,%d,%i,%u,%o,%x,%X,%f,%F,%e,%E,%g,%G,%p,%%
- if argument is negative and format specifier is unsigned, it will not convert to unsigned type
- argument is not converted to a number of specific bits
- if origin type was unsigned, find it in signed type
| specifier | argument type | description |
|---|---|---|
%c |
string |
str[0] ?? '' |
%c |
number |
utf8 code point |
%s |
string |
|
%n |
null |
please use sprintf(...).length |
%d, %i, %u, %o, %x, %X
short|int->numberlong|long long|intmax_t|ssize_t|ptrdiff_t->bigint
%f, %F, %e, %E, %g, %G
double|long double->number- if value in [
infinity,-infinity,NaN]- if specifier is uppercase(
F,E,G,A) =>"INF","-INF","NAN" - else =>
"inf","-inf","nan"
- if specifier is uppercase(
- if value in [
- NaN always treated as a positive value
%p
void*->bigint- if value is
0n=>"(nil)" - else =>
"0x" + value.toString(16)
- if value is
*
int->number
