Unity中如何将double类型数值保留1位小数 优化游戏UI显示效果
解决方案
方案1:仅UI显示格式化(不改动数值计算逻辑,推荐)
这种方式不会影响原有升级价格计算的精度,只在UI展示时做格式化处理,避免显示多余小数:
修改Update方法中的字符串拼接逻辑,使用C#的字符串格式化语法:
void Update() { // F1代表保留1位小数,F0代表保留0位即整数显示 cookieText.text = "Cookies: " + cookies.ToString("F1"); cookiePerClickText.text = "Cookies Per Click: " + cookiesPerClick; ClickUpgradeText.text = "Level: " + ClickUpgrade1Level; // 升级价格也可以按需选择F0/F1格式 ClickUpgradePriceText.text = "Price: " + ClickUpgrade1.ToString("F1"); }
方案2:数值本身向下取整(消除数值存储中的小数位)
如果你希望数值本身就没有小数,避免后续计算出现精度问题,可以在数值更新时做向下取整处理:
- 在升级逻辑中,价格计算完成后调用
Math.Floor向下取整 - 饼干数量如果需要取整也可以在增减时做对应处理
修改后的代码示例:
public void ClickUpgradeOne() { if (cookies >= ClickUpgrade1) { cookiesPerClick += 1; cookies -= ClickUpgrade1; // 升级价格计算后向下取整为整数 ClickUpgrade1 = Math.Floor(ClickUpgrade1 * 1.17); ClickUpgrade1Level += 1; } else { Debug.Log("Poor!"); } }
如果需要饼干数量也向下取整,可以在MakeCookie方法和扣减饼干的位置都加上Math.Floor处理,不需要小数的话也可以直接把cookies改为int类型。
两种方案按需选择即可:如果需要保留价格计算的原始精度,选方案1;如果希望所有数值都是整数,没有隐藏小数,选方案2。
内容的提问来源于stack exchange,提问作者If3y
相关产品推荐
相关产品推荐

