C# 将小数转换为指定格式的字符串
C# Convert decimal to string with specify format
我需要将十进制数 a 转换为以下字符串 b:
- b 必须是 haven
'.'
字符。例如:
- 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");
我需要将十进制数 a 转换为以下字符串 b:
- b 必须是 haven
'.'
字符。例如:- 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");