Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Temas recientes

No mostrar decimales o solo los deseados en Unity

Iniciado por totemalf, Enero 13, 2020, 07:45:47 PM

Tema anterior - Siguiente tema
Enero 13, 2020, 07:45:47 PM Ultima modificación: Enero 13, 2020, 07:47:18 PM por totemalf
Bueno, es un poco chorra el aporte, pero ahí va. Se trate de como imprimir por consola solo la parte entera de una variable decimal, o solo los decimales deseados. Lo he hecho de dos maneras, primero con un casteo a int y luego con ToString("F"), creo que tambien se puede hacer con Math, pero eso no lo he probado, en fin, si alguien quiere aportar algo más, genial:
 
https://www.youtube.com/watch?v=nUOfEiP1iZI
 
Saluti
 
 

El cast a int lo va a redondear (alto o bajo, es igual) y no es lo mismo que eliminar decimales. Lo más recomendable desde mi punto de vista es String.Format de toda la vida y de otros lenguajes.

Primero que nada, muchas gracias. Entiendo entonces que el cast haría algo así como el Math.round() ??
 
O sea, el tema del redondeo es que, cuando esté en 1.30 te va a marcar 1, y cuando sea 1.60 te va a marcar 2, ¿es correcto?.... 
 
Saludos!

De nada hombre! :D
 
El problema del cast es que no vas a controlar el round de decimales, aunque entiendo que el tema era eliminar los decimales, no redondear.

Enero 14, 2020, 11:13:11 PM #4 Ultima modificación: Enero 14, 2020, 11:15:58 PM por totemalf
Vale, a ver, creo que el único que está haciendo lo que yo quiero es el cast, en todos los demás casos redondea al entero más cercano, mientras que el cast siempre coincide con el número entero del time.time en este caso.
 

 void Update()
    {
        tiempo.text = "Tiempo: " + Time.time;
        txtCasteo.text = "Casteo: " +(int)Time.time; //creo que lo hace bien, uno coma lo que sea, guardado en un int es siempre 1
        txtToString.text = "ToString: " + Time.time.ToString("F0");
        txtMat.text = "MathfRound: " + Mathf.Round(Time.time);
        txtMat2.text= "MathfRoundToInt" + Mathf.RoundToInt(Time.time);
        print("MathfRound en consola: " + Mathf.Round(1.4f));
        print("MathfRound en consola2: " + Mathf.Round(1.6f));
        print("MathfRoundToInt en consola: " + Mathf.RoundToInt(1.4f));
        print("MathfRoundToInt en consola2: " + Mathf.RoundToInt(1.6f));
        
        print("ToString en consola: " + 1.4f.ToString("F0"));
        print("ToString en consola2: "+ 1.6f.ToString("F0"));
        print("Casteo en consola: " + (int)1.4f);
        print("Casteo en consola2: " + (int)1.6f);
    }

 
Vale, el que tengo que probar es precisamente el string.format, que me lo has recomendado y no he hecho ni caso, mayormente porque nunca lo he usado, pero veré como se usa y lo meteré tambíen a ver que hace. Saludos!
 
EDIT: Cuando lo tenga claro volveré a editar el primer post para que esto sea un aporte y no una petición de ayuda que es lo que está terminando siendo


Buenas Again, 
 
el caso es que el método Truncate en Mathf no me aparece. El que si me ha funcionado es el Floor: 
 

txtMat3.text = "MathfFloor: " + Mathf.Floor(Time.time); //Devuelve el entero más grande menor o igual que f.

 
Claro que esto solo me funcionará si el número es positivo.
 
Al final veo que  el cast es el único que lo hace exactamente como quiero, independientemente de si es positivo o negativo, el floor solo para positivo, y el resto que he probado redondean al entero más cercano. También he probado Mathf.Ceil, pero este es el contrario de Floor, redonde al más pequeño.
 
Saludos

Etiquetas: