如何在C#中舍入浮点变量

时间:2019-02-13 15:40:17

标签: c# unity3d timer rounding

我正在使用C#创建游戏计时器(以下是我的代码)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;       // key to ensuring this works. interfaces with the ui.

public class Timer2 : MonoBehaviour
{
public static float TimerValue = 120;   // initial timer value
Text timer;

// Use this for initialization
void Start()
{
    timer = GetComponent<Text>();
}

// Update is called once per frame
void Update()
{
    timer.text = ": " + TimerValue;

    TimerValue = TimerValue - Time.deltaTime;

}
}

(括号在堆栈溢出时格式不佳,但在c#中都可以正常工作)

此计时器解决方案的问题在于它将计时器显示为浮点型(请参见下图)。虽然技术上可行,但看起来确实很糟糕,并且数字左右移动(由于数字的宽度不同),使其难以阅读。

我想知道的是如何舍入这个数字,以便可以将其显示为整数。我环顾四周,只发现四舍五入的双精度和十进制数据类型。我也想不出如何对变量进行四舍五入,因为我尝试过的所有示例均不适用于变量。理想情况下,我想继续使用float,因为它更易于操作,并且不需要十进制ro double的详细信息。

非常感谢。

Unity screenshot

2 个答案:

答案 0 :(得分:3)

由于您只关心浮点数的显示,而没有使用数字进行进一步的计算,因此可以只使用String类的格式设置功能。 例如,

timer.text = ": " + TimerValue.ToString("F2");

将对其进行四舍五入,并且仅显示至小数点后两位。

timer.text = ": " + TimerValue.ToString("F0");

会将其四舍五入为整数。

Here's the documentation on the various formatting options available

答案 1 :(得分:2)

您可以只使用string.Format来显示具有设定的小数位数的值。

例如:

timer.text = string.Fomat(": {0:0}", TimerValue);    // format with 0 decimal places
// output
// : 118

timer.text = string.Fomat(": {0:0.00}", TimerValue);    // format with 2 decimal places
// output
// : 117.97

请注意,这将舍入值。