Unity游戏开发中数字较大的单位转换问题

一:单位转换的意义


很多游戏中的数据涉及到很大的数字,比如当前升级需要310000000000金币,总不能把310000000000这个数字显示在屏幕上,所以就引入了一些大数据数字的单位转换
K是10的3次方,也就是千
M是10的6次方,也就是百万
B是10的9次方,也就是十亿
T是10的12次方,也就是万亿


二:代码实现

using UnityEngine;

//常规版单位转换(不带小数)
public class Utility : MonoBehaviour
{
    /// <summary>
    /// 数字单位转换
    /// </summary>
    /// <param name="value">数值</param>
    /// <returns></returns>
    public static string TransUnit(long value)
    {
        if (value >= 1000000000000)
        {
            return value / 1000000000000 + "T";
        }
        else if (value >= 1000000000)
        {
            return value / 1000000000 + "B";
        }
        else if (value >= 1000000)
        {
            return value / 1000000 + "M";
        }
        else if (value >= 1000)
        {
            return value / 1000 + "K";
        }
        else
        {
            return value.ToString();
        }
    }
}
using UnityEngine;

//常规版单位转换(带小数)
public class Utility : MonoBehaviour
{
    /// <summary>
    /// 数字单位转换
    /// </summary>
    /// <param name="value">数值</param>
    /// <param name="decimalsNum">保留几位小数</param>
    /// <returns></returns>
    public static string TransUnit(long value, int decimalsNum)
    {
        if (value >= 1000000000000)
        {
            return (int) ((value * 1f / 1000000000000) * Mathf.Pow(10, decimalsNum)) / Mathf.Pow(10, decimalsNum) + "T";
        }
        else if (value >= 1000000000)
        {
            return (int) ((value * 1f / 1000000000) * Mathf.Pow(10, decimalsNum)) / Mathf.Pow(10, decimalsNum) + "B";
        }
        else if (value >= 1000000)
        {
            return (int) ((value * 1f / 1000000) * Mathf.Pow(10, decimalsNum)) / Mathf.Pow(10, decimalsNum) + "M";
        }
        else if (value >= 1000)
        {
            return (int) ((value * 1f / 1000) * Mathf.Pow(10, decimalsNum)) / Mathf.Pow(10, decimalsNum) + "K";
        }
        else
        {
            return value.ToString();
        }
    }
}
using UnityEngine;

//有些游戏,开始的数值就从1000开始,那么一开始就显示1K就不太好了,所以从1000000开始才转换为1000K
public class Utility : MonoBehaviour
{
    /// <summary>
    /// 数字单位转换
    /// </summary>
    /// <param name="value">数值</param>
    /// <returns></returns>
    public static string TransUnit(long value)
    {
        if (value >= 1000000000000000)
        {
            if (value / 1000000000000 >= 1000)
            {
                return (value / 1000000000000).ToString().Insert((value / 1000000000000000).ToString().Length, ",") + "T";
            }
            else
            {
                return value / 1000000000000 + "T";
            }
        }
        else if (value >= 1000000000000)
        {
            if (value / 1000000000 >= 1000)
            {
                return (value / 1000000000).ToString().Insert((value / 1000000000000).ToString().Length, ",") + "B";
            }
            else
            {
                return value / 1000000000 + "B";
            }
        }
        else if (value >= 1000000000)
        {
            if (value / 1000000 >= 1000)
            {
                return (value / 1000000).ToString().Insert((value / 1000000000).ToString().Length, ",") + "M";
            }
            else
            {
                return value / 1000000 + "M";
            }
        }
        else if (value >= 1000000)
        {
            if (value / 1000 >= 1000)
            {
                return (value / 1000).ToString().Insert((value / 1000000).ToString().Length, ",") + "K";
            }
            else
            {
                return value / 1000 + "K";
            }
        }
        else
        {
            if (value >= 1000)
            {
                return value.ToString().Insert((value / 1000).ToString().Length, ",");
            }
            else
            {
                return value.ToString();
            }
        }
    }
}
using UnityEngine;

//仿家国梦,屏幕上始终显示指定个数个数字
public class Utility : MonoBehaviour
{
    /// <summary>
    /// 数字单位转换
    /// </summary>
    /// <param name="value">数值</param>
    /// <param name="decimalsNum">屏幕上显示几个数</param>
    /// <returns></returns>
    public static string TransUnit(long value, int showCount)
    {
        if (value >= 1000000000000)
        {
            return (int) ((value * 1f / 1000000000000) * Mathf.Pow(10, showCount - (value / 1000000000000).ToString().Length)) / Mathf.Pow(10, showCount - (value / 1000000000000).ToString().Length) +
                   "T";
        }
        else if (value >= 1000000000)
        {
            return (int) ((value * 1f / 1000000000) * Mathf.Pow(10, showCount - (value / 1000000000).ToString().Length)) / Mathf.Pow(10, showCount - (value / 1000000000).ToString().Length) + "B";
        }
        else if (value >= 1000000)
        {
            return (int) ((value * 1f / 1000000) * Mathf.Pow(10, showCount - (value / 1000000).ToString().Length)) / Mathf.Pow(10, showCount - (value / 1000000).ToString().Length) + "M";
        }
        else if (value >= 1000)
        {
            return (int) ((value * 1f / 1000) * Mathf.Pow(10, showCount - (value / 1000).ToString().Length)) / Mathf.Pow(10, showCount - (value / 1000).ToString().Length) + "K";
        }
        else
        {
            return value.ToString();
        }
    }
}
发布了138 篇原创文章 · 获赞 292 · 访问量 27万+

猜你喜欢

转载自blog.csdn.net/LLLLL__/article/details/104276180