La gran cagada

Todas las empresas del juego necesitan diésel como suministro para poder pagar el transporte.
Así se había configurado. O eso creía yo. Resulta que me había olvidado de las bodegas y las licorerías, por lo que estas no tenían forma alguna de producir.

Lamento el error, ¡gracias por avisar!
He aprovechado para hacer que en suministros salgan los iconos de los recursos en vez de su nombre cortado :p

Sin embargo este no era el único error grave.


La gran cagada

Trabajar con decimales en programación nunca es fácil. Hay varias formas de hacerlo y cada una de ellas tiene algún punto negativo.
Por ejemplo, puedes utilizar el tipo float, que es nativo tanto en PHP como en bases de datos como MySQL o PostgreSQL.
Sin embargo, los números en coma flotante presentan un problema importante: no son fiables para comparaciones directas.
Esto se debe a que las operaciones con floats pueden introducir pequeñas imprecisiones por la forma en que se representan internamente.
(tu a lo mejor metes 1.53 e internamente se guarda como 1.52999999999)

Por eso, en lugar de hacer una comparación estricta como 1.53 == 1.53, lo habitual es aplicar una tolerancia y verificar si la diferencia entre ambos valores es suficientemente pequeña.
Es decir, se usa una fórmula como: abs(1.53 - 1.53) < 0.05
Esto permite saber si los dos números son "aproximadamente iguales", lo cual es mucho más seguro cuando trabajas con floats.
Pero como ya podéis ver, es un coñazo.

La gente que trabaja con dinerito lo que hace es usar números enteros y simplemente asignar los primeros 2 dígitos a decimales.
Así pues 10€ se guardan como 1000.
Aquí la complejidad aparece alrededor de toda la operativa: Tienes tratar siempre los números antes de mostrarlos y también tienes que tratar todo input que escriba el usuario, múltiplicando normalmente por 100.

En Racanofeller necesitamos decimales para poder poner precios competitivos, de modo que había que decidirse por una opción.

La elegida fue la segunda y todos los campos monetarios de la db fueron creados como integers.
Luego, tonto de mi, me olvidé del tema y en ninguna parte de la UI y de la entrada de datos lo tuve en cuenta.
Aún peor, más adelante creé campos monetarios nuevos y los hice como floats....

Como podéis imaginar, he pasado un maravilloso finde tratando de arreglar el desaguisado.
Por suerte, en cuanto a la UI, ya preparé una función en su momento que se encarga de mostrar los números bonitos.
De modo que tocándola para que además tenga en cuenta el tema decimales se ha arreglado la mayor parte.