我无法删除小数C#Unity

时间:2019-07-15 14:19:16

标签: c# unity3d decimal

我正在使用Unity3D和C#制作汽车游戏,我想显示速度,但是我不能删除小数。请帮助。

我已经搜索了一个多小时,但是没有什么能解决我的问题。

var speed = Convert.ToString(GetComponent<Rigidbody>().velocity.magnitude * 3.6); 
speed = String.Format("{0:C0}", speed);
Camera.FindObjectOfType<TextMesh>().text = speed;

Screenshot

2 个答案:

答案 0 :(得分:3)

您正在将string传递给

String.Format("{0:C0}", speed);

格式化程序仅适用于数字值(intfloatdouble,...)不适用于string。< / p>

另请参阅有关custom numeric format stringsstandard numeric format strings的更多信息,因为"C0"用于Currency,可能不是您要查找的内容。您可能评级者想将"N0"用作Numeric或仅使用如下所示的自定义字符串。

您并没有真正指定输出的确切外观,以及是否要截断所有小数位或仅截取特定精度的输出。


直接将其传递给

                                      // Also note the f here for a float multiplication!
                                      //                       |
                                      //                       v
var speed = (GetComponent<Rigidbody>().velocity.magnitude * 3.6f).ToString("0.00"); 

var speed = (GetComponent<Rigidbody>().velocity.magnitude * 3.6f).ToString("0"); 

或者,您也可以如注释中所述使用Mathf.RoundToInt以便首先舍入为int值

var speed = Mathf.RoundToInt(GetComponent<Rigidbody>().velocity.magnitude * 3.6f).ToString(); 

旁注:

关于效率的最后附注:

似乎您想在例如反复Update ...不要!

在游戏开始时只使用FindGetCompnent一次,以后再使用引用即可:

// if possible even reference this in the Inspector right 
// away than you don't need the Awake method at all
[SerializeField] private RigidBody rigidBody;
[SerializeField] private TextMesh textMesh;

privtae void Awake()
{
    if(!rigidBody) rigidBody = GetComponent<Rigidbody>();
    if(!textMesh) textMesh = Camera.FindObjectOfType<TextMesh>();
}

privtae void Update()
{
    var speed = Convert.ToString(rigidBody.velocity.magnitude * 3.6); 
    speed = String.Format("{0:C0}", speed);
    textMesh.text = speed;
}

答案 1 :(得分:0)

C格式代表“货币”。以下代码使用N修饰符作为'number':

decimal speed;
speed = 2.4m;
Console.WriteLine(String.Format("{0:N0}", speed));
speed = 2.5m;
Console.WriteLine(String.Format("{0:N0}", speed));
speed = 2.6m;
Console.WriteLine(String.Format("{0:N0}", speed));

产生如下结果:

2
3
3

对于floatdouble类型,其作用相同。

请注意,您的代码speed是一个字符串,显然,它不能使用数字格式。