C# 字符串格式模式,用于将数字截断为小数点后两位(例如金钱),或者在尾随零的情况下不截断

Ada*_*own 1 c#

如何将以下示例数字(十进制、双精度或浮点数)转换为小数点后两位,并将数字向右截断(向下舍入):

77.1455
52.00
714.1554
5552.0001
Run Code Online (Sandbox Code Playgroud)

应该变成这样

"77.14"
"52"
"714.15"
"5552"
Run Code Online (Sandbox Code Playgroud)

有的建议

String.Format("G29");
String.Format("0.00");
Run Code Online (Sandbox Code Playgroud)

但它们并没有按预期工作。

小智 7

使用“####.##”模式通过自然舍入实现所需的结果(请参阅下面的截断示例)。几个例子:

var f1 = 1000.3455f;
var result = f1.ToString("####.##");
//result = 1000.35
Run Code Online (Sandbox Code Playgroud)

向下舍入消除尾随零:

f1 = 1000.0001f;
result = f1.ToString("####.##");
//result = 1000;
Run Code Online (Sandbox Code Playgroud)

将逗号 if 添加到逗号分隔数字 >= 1000 的格式字符串中:

var f1 = 1000.3455f;
f1.ToString("#,###.##");
//result = 1,000.35;
Run Code Online (Sandbox Code Playgroud)

如果您想在不进行自然舍入的情况下删除超过百分之一的尾随数字:

var f1 = 1000.3455f;
f1 = (float)Math.Round(f1, 2, MidpointRounding.ToZero);
result = f1.ToString("#,###.##");
//result = 1,000.34
Run Code Online (Sandbox Code Playgroud)


Tim*_*ter 5

您可以截断两位小数后的值:

(Math.Truncate(100 * value) / 100).ToString();
Run Code Online (Sandbox Code Playgroud)

完整样本:

static void Main(string[] args)
{
    float[] values = { 77.1455f, 52.00f, 714.1554f, 5552.0001f };
    string[] formattedValues = Format(values);
    Console.WriteLine(string.Join(Environment.NewLine, formattedValues));
}  

private static string[] Format(float[] values)
{
    return Array.ConvertAll(values, Convert);
}

private static string Convert(float value)
{
    return (Math.Truncate(100 * value) / 100).ToString();
}
Run Code Online (Sandbox Code Playgroud)