Nota: El uso modf o HOQF como se sugiere en otras respuestas.
Pero no espere tener exactamente el mismo número que atof ("0,30"), como sugiere su solicitud de igual a igual.
De hecho, sucede que atof ("18.30") es el float más cercano a atof ("18.0") + atof ("0.30"), pero esta operación no es exacta, tiene un error de redondeo, como cualquier suma de atof ("0.30") con un entero> 0.
Así que cuando restas la parte entera, no hay razón para encontrar atof ("0.30") de vuelta, solo encuentras algo cerca de atof ("0.30 ").
Expresado en Squeak/Pharo Smalltalk (doble precisión utilizado aquí)
(1 to: 100) count: [:i | 0.3 + i = (3/10+i) asFloat].
da
-> 100
Pero:
(1 to: 100) count: [:i | (3/10+i) asFloat - i = 0.3].
da
-> 0
qué quiere HOQF (18.30, 1.0)? – gbulmer
O simplemente 'y1 = (int) x; y2 = x - y1; ', aunque se pone tictac con números negativos, según tu intención. –
@gbulmer bien, fmodf .... – lnafziger