有没有办法格式化用户指定的n
个数字的双号?
例如,如果用户想要始终看到4位数,请将以下数字作为示例:
Original Formatted
------- ---------
3.42421 3.424
265.6250 265.6
812.50 812.5
12.68798 12.68
0.68787 0.687
我做了这个,但它只允许浮点数!这不是我想要的!
public string ToEngV(double d, int percision = 0)
{
string zeros = string.Empty;
if (percision <= 0)
{
zeros += "0";
}
else if (percision > 0)
{
for (int i = 0; i < percision; i++)
{
zeros += "0";
}
}
return String.Format("{0:0." + zeros + "}", d)
}
想象一下,我将上述方法称为812.50
之类的数字,并将精度设置为(现在用于我要格式化的所有数字)。显然输出将是812.5
但是,如果我给出另一个数字1.61826
,我会得到1.6
,这会破坏页面中的格式,我会向用户显示这些数字。我需要1.618
因此,我希望我的方法始终显示N
数字!
答案 0 :(得分:2)
我不确定你要求舍入或截断数字,所以我写了这个方法:
public static string ToEngV(this double d, int digits, bool round)
{
var lenght = Math.Truncate(d).ToString().Length;
if (lenght > digits)
{
throw new ArgumentException("...");
}
int decimals = digits - lenght;
if (round)
{
return Math.Round(d, decimals).ToString();
}
else
{
int pow = (int)Math.Pow(10, decimals);
return (Math.Truncate(d * pow) / pow).ToString();
}
}
示例:
var numbers = new double[] { 3.42421, 265.6250, 812.50, 12.68798, 0.68787 };
foreach (var number in numbers)
{
Console.WriteLine(number.ToEngV(4, false));
}
Console.WriteLine()
foreach (var number in numbers)
{
Console.WriteLine(number.ToEngV(4, true));
}
输出:
3.424
265.6
812.5
12.68
0.687
3.424
265.6
812.5
12.69
0.688
请注意,如果您的号码的整数位数超过digits
,则会得到ArgumentException
。
答案 1 :(得分:1)
我不确定这是你要找的东西,不管怎么试试看:
string FmtDbl(double num, int digits)
{
digits++; // To include decimal separator
string ret = num.ToString();
if (ret.Length > digits) return ret.Substring(0, digits);
else return ret + new String('0', digits - ret.Length);
}
请注意,如果您的号码超过位数整数位数,则无效...
答案 2 :(得分:1)
如下:
d.ToString().PadRigth(4,'0').SubString(0,4);
答案 3 :(得分:1)
number.ToString("#0.000").Substring(0, 5);
答案 4 :(得分:0)
public static void RunSnippet()
{
Console.WriteLine(myCustomFormatter(3.42421));
Console.WriteLine(myCustomFormatter(265.6250));
Console.WriteLine(myCustomFormatter(812.50));
Console.WriteLine(myCustomFormatter(12.68798));
Console.WriteLine(myCustomFormatter(0.68787));
Console.ReadLine();
}
public static double myCustomFormatter(double value)
{
string sValue = value.ToString();
string sFormattedValue = sValue.Substring(0,5);
double dFormattedValue= Convert.ToDouble(sFormattedValue);
return dFormattedValue;
}