fmt.h (1226B)
1 /* fmt.h - como se muestra un resultado: decimal (Norm/Fix/Sci/Eng) o forma exacta, 2 * armado como Expr para dibujarlo con el mismo motor que la entrada. */ 3 #ifndef FMT_H 4 #define FMT_H 5 #include "num.h" 6 #include "expr.h" 7 8 enum { FMT_NORM1, FMT_NORM2, FMT_FIX, FMT_SCI, FMT_ENG }; 9 10 typedef struct { 11 uint8_t mode, n; /* n: decimales (Fix) o cifras (Sci, 0 = 10) */ 12 uint8_t digits; /* cifras significativas en Norm (10 como la Casio) */ 13 bool mixed; /* fracciones como entero + fraccion */ 14 } Fmt; 15 16 void fmt_default(Fmt *f); 17 /* Decimal como texto plano: mantisa y exponente aparte (exp valido si *sci). */ 18 void fmt_dec(Dec v, const Fmt *f, char *mant, int n, int *exp, bool *sci); 19 /* Texto plano en una linea ("1.5E-7", "2/3", "√2", ...) para la terminal y los tests. */ 20 int fmt_plain(const Num *v, const Fmt *f, bool want_dec, char *buf, int n); 21 /* Resultado como expresion natural. Devuelve true si salio en forma exacta. */ 22 bool fmt_result(const Num *v, const Fmt *f, bool want_dec, Expr *out); 23 /* Hay forma exacta para mostrar (y S⇔D sirve) */ 24 bool fmt_has_exact(const Num *v, const Fmt *f); 25 /* grados, minutos y segundos: 12°34′56.78″ */ 26 void fmt_dms(Dec v, Expr *out); 27 28 #endif