Autor Tema: Medir la cantidad de decimales de un número.

0 Usuarios y 1 Visitante están viendo este tema.

11 Marzo, 2024, 05:32 pm
Leído 33 veces

Tachikomaia

  • $$\Large \color{#c88359}\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 586
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Puede que sea fácil pero no me sale.

N = un número que puede tener decimales o no, por ejemplo 8.3

NsinDecimales = (esto lo puedo hacer), 8.

Diferencia = N-NsinDecimales = 0.3

Si Diferencia > 0
  Tiene decimales.
  Decimales = (Largo de Diferencia)-2, puedo hacerlo.
sino
  Decimales = 0

¿Está bien?

Pero algo estoy haciendo mal en mi código porque no funciona bien, no sé.

Tengo una variable llamada DecimalesDelNaModificar que marca cuántos decimales debe tener como mínimo el N. Hago esto:
Código: [Seleccionar]
N = NOriginal/Math.pow(10, DecimalesDelNaModificar);
if (DecimalesDelNaModificar>0) {
LargoMinimodeDiferencia = DecimalesDelNaModificar+2;
} else {
LargoMinimodeDiferencia = 1;
}
if (String(NOriginal-N).length>=LargoMinimodeDiferencia) {
// N tiene una cantidad aceptable de decimales.

Si NOriginal es 19 y DecimalesDelNaModificar es 1, se hará 19/10 creo, resultando 1.9.
LargoMinimodeDiferencia será 3
19-1.9 = 17.1
Largo 4.
4 >= 3 por lo tanto es aceptable, correcto.

Si NOriginal es 20 y DecimalesDelNaModificar es 1, se hará 20/10 creo, resultando 2.
LargoMinimodeDiferencia será 3
20-2 = 18
Largo 2.
2 no >= 3 por lo tanto no es aceptable, correcto.

Pero el código me falla, no sé si en ese caso o en otro pero falla.

Además si la parte entera es suficientemente larga entonces creo que fallaría:
Si NOriginal es 2000 y DecimalesDelNaModificar es 1, se hará 2000/10 creo, resultando 200.
LargoMinimodeDiferencia será 3
2000-200 = 1800
Largo 4.
4 >= 3 por lo tanto es aceptable, pero debe tener 1 decimal mínimo y no lo tiene, ergo está mal.

Quizá basta con decir que si el NOriginal termina en 0 entonces no servirá, pero quiero entender qué tiene mal el o los métodos que dije. ¿Por qué fallan y cual es la solución?

Aquí un ejemplo tomado del mismo programa (DecimalesDelNaModificar es 2):
NOriginal: 19
N es: 0.19
String(NOriginal-N).length >= LargoMinimodeDiferencia:
5 >= 4, entonces es aceptable.
NOriginal: 20
N: 0.2
Si String(NOriginal-N).length >= LargoMinimodeDiferencia:
4 >= 4, entonceses aceptable.
Ahí falló, no es aceptable porque debe tener al menos 2 decimales como indica DecimalesDelNaModificar.

Mi código es un lío, ya ¿cómo lo arreglo?