繁体   English   中英

C#使用指定格式将十进制转换为字符串

[英]C# Convert decimal to string with specify format

我需要将十进制数 a 转换为字符串 b 以下:

  • b 必须是have '.' 性格。 例如:
    • a = 12 -> b = "12.0"
    • a = 1.2 -> b = "1.2"
    • a = 1.234 -> b = "1.234"

我怎样才能用 1 个命令做到这一点?

  • b 必须正好是 10 个字符。 例如:
    • a = 101 -> b = "101.000000"
    • a = 1.234 -> b = "1.23400000"
    • a = 1.234567891 -> b = "1.23456789"

(与1相同的问题)

decimal a = 12;
var b = a.ToString("N1"); // 12.0

a = 1.2m;
b = a.ToString(); // 1.2

a = 101m;
b = a.ToString("N10"); // 101.0000000000

a = 1.234m;
b = a.ToString("N10"); // 1.2340000000

对于问题的第二部分 - 您想要总长度为 10 的地方:

decimal a = 1.234567891m;
int numberOfDigits = ((int)a).ToString().Length;
var b = a.ToString($"N{9 - numberOfDigits}"); //1.23456789

//Or before C# 6.0
var b = a.ToString("N" + (9 - numberOfDigits)); //1.23456789

基本上((int)number).ToString().Length为您提供. (转换为 int 将删除分数)然后从. (小数点本身也是-1)

您可以使用.ToString()来完成此任务:

decimal aDecimalVal = 10.234m;
string decimalString = aDecimalVal.ToString("#.000"); // "10.234"
aDecimalVal.ToString("#.00"); // "10.23"
aDecimalVal.ToString("#.0000"); // "10.2340"

后的0. 在格式字符串中将决定十进制字符串中的位数。

更新:所以你想找到小数点后的位数,所以代码中的变化将如下所示:

decimal aDecimalVal = 10.2343455m;
int count = BitConverter.GetBytes(decimal.GetBits(aDecimalVal)[3])[2];
string formatString = String.Format("N{0}",count.ToString());
string decimalString = aDecimalVal.ToString(formatString); // "10.2343455"

我设法使用double来做到这一点。 这是你需要的吗? 我不太明白你问题的第二部分。

double a = 12;
string b = a.ToString("0.0000000000######");
Console.WriteLine(b);

对于第一个,如果您不知道变量可以有多少个数字,您可以使用扩展方法:

public static string ToSpecificFormat(this decimal value)
{
    var count = BitConverter.GetBytes(decimal.GetBits(value)[3])[2];
    return value.ToString(count == 0 ? "N1" : "N" + count);
}

这将确保输出中至少有 1 位数字。

对于第二个,如果数字 > 1000000000,则所选答案将失败。这个应该有效:

public static string ToFixedLength(this decimal value)
{
    if (value >= 1000000000m) return value.ToString("N0");
    
    var format = 9 - Math.Floor(value).ToString().Length;
    return value.ToString("N" + format);
}

输出:

1.234m.ToFixedLength(); // 1.23400000
101m.ToFixedLength(); // 101.000000
123456789123m.ToFixedLength(); // 123,456,789,123

如果您希望结果为字符串,只需解析它并将其格式化为一位小数:

string strTemp = 12;
double temp = Double.Parse(strTemp, CultureInfo.InvariantCulture);
string result = temp.ToString("N1", CultureInfo.InvariantCulture);

四舍五入到小数点后两位,例如。 27.658 => 27.66

确保总是有 2 个小数位,例如。 12 => 12.00, 12.5 => 12.50

非常适合货币金额。

strTemp.ToString("F");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM