我知道我们可以显示小数到达某些地方(如果没有固定的地方)。例如,我们最多可以使用String.Format
:
String.Format("{0:0.00}", 123.4567);
但我们的要求是,我们必须从数据库中取小数位并显示到该位置的十进制值。例如:
int n=no of decimal places
我想写一些类似的东西:
String.Format("{0:0.n}", 123.4567);
任何建议都会有很大的帮助。
添加注意:String.Format
将数字四舍五入。我正在寻找遗漏剩余数字的东西。
答案 0 :(得分:5)
也许:
int n = 3;
string format = String.Format("{{0:0.{0}}}", new string('0', n));
Console.Write(String.Format(format, 123.4567)); // 123,457
方法:
public static string FormatNumber(double d, int decimalPlaces)
{
string format = String.Format("{{0:0.{0}}}", new string('0', decimalPlaces));
return String.Format(format, d);
}
甚至更简单,使用ToString
+ N
format specifier:
public static string FormatNumber(double d, int decimalPlaces)
{
return d.ToString("N" + decimalPlaces);
}
如果您不想要默认的舍入行为,但您只想截断剩余的小数位:
public static string FormatNumberNoRounding(double d, int decimalPlaces)
{
double factor = Math.Pow(10, decimalPlaces);
double truncated = Math.Floor(d * factor) / factor;
return truncated.ToString();
}
答案 1 :(得分:1)
如果您更喜欢字符串格式化,这可能更简单:
decimal d = 123.4567
Console.Write("rounded: {0}", decimial.Round(d, 3));
此外,您可以控制使用的舍入类型:
decimial.Round(d, 3, MidpointRounding.AwayFromZero)
由于没有多少人意识到.NET的默认舍入方法是ToEven,它舍入到最接近的偶数。所以像2.5这样的值实际上是2到2而不是3。