一:单位转换的意义
很多游戏中的数据涉及到很大的数字,比如当前升级需要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();
}
}
}