删除小数点后的数字c#
remove numbers after decimal c#
我正在尝试编写代码来统一显示货币,但我正在尝试删除小数点后的所有数字,小数点后的 1 除外,因此它应该显示“34.4”,但它确实显示“34.454”
这是实际的游戏视图和检查器
https://i.stack.imgur.com/b6CNb.png
这是全部代码
任何和所有的帮助都会很棒
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Money : MonoBehaviour
{
public float MoneyValue;
public Text MoneyTextDisplay;
private float MoneyDigit;
void Start()
{
}
void Update()
{
MoneyDigit = Mathf.Floor(Mathf.Log10(MoneyValue) + 1);
if (MoneyDigit <4)
{
MoneyTextDisplay.text = "Money: " + MoneyValue;
}
if (MoneyDigit > 3 && MoneyDigit < 7)
{
MoneyTextDisplay.text = "Money: " + MoneyValue / 1000 + "K";
}
}
}
试试这个:
void Update()
{
MoneyDigit = Mathf.Floor(Mathf.Log10(MoneyValue) + 1);
if (MoneyDigit <4)
{
MoneyTextDisplay.text = "Money: " + MoneyValue.ToString("0.00");
}
if (MoneyDigit > 3 && MoneyDigit < 7)
{
MoneyTextDisplay.text = "Money: " + (MoneyValue / 1000).ToString("0.0") + "K";
}
}
当您将数字连接到字符串时,编译器会在数字上插入对 ToString()
的调用以从中获取字符串,然后连接两个结果字符串。
然而,数字提供自定义格式选项,您可以根据需要自行访问,例如:
MoneyTextDisplay.text = $"Money: {MoneyValue / 1000:0.0}K";
在这种情况下,0.0
意味着您总是希望看到恰好一位小数。 0.#
表示您最多希望看到一位小数,但如果为 0,则没有小数。使用您喜欢的任何一个。
使用math.floor();。这将删除所有小数。将您的原始数字乘以十,取底,然后除以十。
使用字符串格式。我将显示“N1”作为格式,但您可以将其更改为使用其他 numeric format strings.
if (MoneyDigit <4)
{
MoneyTextDisplay.text = $"Money: {MoneyValue:N1}";
}
if (MoneyDigit > 3 && MoneyDigit < 7)
{
MoneyTextDisplay.text = $"Money: {MoneyValue / 1000:N1}K";
}
作为旁注,您可能希望使用 decimal
类型而不是浮点数,因为它设计用于货币之类的东西,您不希望丢失浮点数据.
根据您的示例,您希望截断数字而不是四舍五入。
要像这样截断你需要应用一个小公式
var truncatedNumber = Math.Floor(MoneyValue * 10f) / 10f;
乘以 10 会将 34.454
变为 344.54
。然后 Math.Floor
去掉多余的小数所以你的数字变成 344
最后除以 10 结果变成 34.4
我认为最简单的方法是使用这样的 .ToString(string) 方法 (.ToString("F1")):
decimal dec = 12.127565746m;
Console.WriteLine(dec.ToString("F1"));
这段代码的输出是12.1
F1 表示“.”后一位
例如,您可以使用 F3 表示三位数字。 (输出 12.127)
我正在尝试编写代码来统一显示货币,但我正在尝试删除小数点后的所有数字,小数点后的 1 除外,因此它应该显示“34.4”,但它确实显示“34.454”
这是实际的游戏视图和检查器 https://i.stack.imgur.com/b6CNb.png
这是全部代码
任何和所有的帮助都会很棒
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Money : MonoBehaviour
{
public float MoneyValue;
public Text MoneyTextDisplay;
private float MoneyDigit;
void Start()
{
}
void Update()
{
MoneyDigit = Mathf.Floor(Mathf.Log10(MoneyValue) + 1);
if (MoneyDigit <4)
{
MoneyTextDisplay.text = "Money: " + MoneyValue;
}
if (MoneyDigit > 3 && MoneyDigit < 7)
{
MoneyTextDisplay.text = "Money: " + MoneyValue / 1000 + "K";
}
}
}
试试这个:
void Update()
{
MoneyDigit = Mathf.Floor(Mathf.Log10(MoneyValue) + 1);
if (MoneyDigit <4)
{
MoneyTextDisplay.text = "Money: " + MoneyValue.ToString("0.00");
}
if (MoneyDigit > 3 && MoneyDigit < 7)
{
MoneyTextDisplay.text = "Money: " + (MoneyValue / 1000).ToString("0.0") + "K";
}
}
当您将数字连接到字符串时,编译器会在数字上插入对 ToString()
的调用以从中获取字符串,然后连接两个结果字符串。
然而,数字提供自定义格式选项,您可以根据需要自行访问,例如:
MoneyTextDisplay.text = $"Money: {MoneyValue / 1000:0.0}K";
在这种情况下,0.0
意味着您总是希望看到恰好一位小数。 0.#
表示您最多希望看到一位小数,但如果为 0,则没有小数。使用您喜欢的任何一个。
使用math.floor();。这将删除所有小数。将您的原始数字乘以十,取底,然后除以十。
使用字符串格式。我将显示“N1”作为格式,但您可以将其更改为使用其他 numeric format strings.
if (MoneyDigit <4)
{
MoneyTextDisplay.text = $"Money: {MoneyValue:N1}";
}
if (MoneyDigit > 3 && MoneyDigit < 7)
{
MoneyTextDisplay.text = $"Money: {MoneyValue / 1000:N1}K";
}
作为旁注,您可能希望使用 decimal
类型而不是浮点数,因为它设计用于货币之类的东西,您不希望丢失浮点数据.
根据您的示例,您希望截断数字而不是四舍五入。 要像这样截断你需要应用一个小公式
var truncatedNumber = Math.Floor(MoneyValue * 10f) / 10f;
乘以 10 会将 34.454
变为 344.54
。然后 Math.Floor
去掉多余的小数所以你的数字变成 344
最后除以 10 结果变成 34.4
我认为最简单的方法是使用这样的 .ToString(string) 方法 (.ToString("F1")):
decimal dec = 12.127565746m;
Console.WriteLine(dec.ToString("F1"));
这段代码的输出是12.1
F1 表示“.”后一位 例如,您可以使用 F3 表示三位数字。 (输出 12.127)