Sim*_*mon 12 c# decimal-point string-formatting
我需要将浮点数格式化为x个字符(在我的情况下为6,包括小数点).我的输出还需要包含数字的符号
所以给定输入,这是预期的输出
1.23456 => +1.2345
-12.34567 => -12.345
-0.123456 => -0.1234
1234.567 => +1234.5
Run Code Online (Sandbox Code Playgroud)
请假设在最后一个字符之前总是有一个小数位.即没有 12345.6
数字输入 - 输入将始终小于或等于9999.9
.
我想这必须有条件地完成.
这是一种无需格式字符串(“F”除外)的透明方法:
static void Main()
{
double y = 1.23456;
Console.WriteLine(FormatNumDigits(y,5));
y= -12.34567;
Console.WriteLine(FormatNumDigits(y,5));
y = -0.123456;
Console.WriteLine(FormatNumDigits(y,5));
y = 1234.567;
Console.WriteLine(FormatNumDigits(y,5));
y = 0.00000234;
Console.WriteLine(FormatNumDigits(y,5));
y = 1.1;
Console.WriteLine(FormatNumDigits(y,5));
}
public string FormatNumDigits(double number, int x) {
string asString = (number >= 0? "+":"") + number.ToString("F50",System.Globalization.CultureInfo.InvariantCulture);
if (asString.Contains('.')) {
if (asString.Length > x + 2) {
return asString.Substring(0, x + 2);
} else {
// Pad with zeros
return asString.Insert(asString.Length, new String('0', x + 2 - asString.Length));
}
} else {
if (asString.Length > x + 1) {
return asString.Substring(0, x + 1);
} else {
// Pad with zeros
return asString.Insert(1, new String('0', x + 1 - asString.Length));
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
+1.2345
-12.345
-0.1234
+1234.5
+0.0000
+1.1000
Run Code Online (Sandbox Code Playgroud)
编辑
请注意,它不会截断尾随零。