C#-字符串格式:双固定宽度
如何在C#中使用C#-字符串格式:双固定宽度,c#,double,fixed-width,custom-formatting,C#,Double,Fixed Width,Custom Formatting,如何在C#中使用String.Format,因此双精度显示如下: 价值观: -1.0 1.011 100.155 1000.25 11000.52221 显示的字符串: -1.00 1.011 100.2 1000 11001 主要的一点是我的宽度是固定为5个字符,无论什么。我真的不在乎右边显示了多少小数位。如果小数点左边有4个或4个以上的数字,我希望删除小数点右边的所有数字(包括小数点本身) 这似乎应该是一个相当标准的做法。但是我没有太多的运气找到一个有效的答案 对上面的显示字符串进行了
String.Format
,因此双精度显示如下:
价值观:
-1.0
1.011
100.155
1000.25
11000.52221
显示的字符串:
-1.00
1.011
100.2
1000
11001
主要的一点是我的宽度是固定为5个字符,无论什么。我真的不在乎右边显示了多少小数位。如果小数点左边有4个或4个以上的数字,我希望删除小数点右边的所有数字(包括小数点本身)
这似乎应该是一个相当标准的做法。但是我没有太多的运气找到一个有效的答案 对上面的显示字符串进行了几处更正,我确实需要舍入。 谢谢
public string FormatNumber(double number)
{
string stringRepresentation = number.ToString();
if (stringRepresentation.Length > 5)
stringRepresentation = stringRepresentation.Substring(0, 5);
if (stringRepresentation.Length == 5 && stringRepresentation.EndsWith("."))
stringRepresentation = stringRepresentation.Substring(0, 4);
return stringRepresentation.PadLeft(5);
}
编辑:刚刚意识到,如果需要的话,这不会在小数点的末尾加零(如第一个示例中所示),但应该为您提供必要的工具来完成它
EDITx2:考虑到您最近添加的内容,您打算进行舍入,这会变得更加复杂。首先,你必须做一个检查,看看你是否有小数点,小数点在什么位置。然后您必须将其四舍五入到小数点,然后可能会运行整个输出。请注意,根据您的算法,如果四舍五入滚动到数字上,您可能会得到一些不正确的结果(例如,
-10.9999
可能会变成-11.00
或-11
,具体取决于您的实现)如果要在许多地方经常使用,请在Double上创建一个扩展方法
using System;
public static class DoubleExtensionMethods
{
public static string FormattedTo5(this double number)
{
string numberAsText = number.ToString();
if (numberAsText.Length > 5)
{
numberAsText = numberAsText.Substring(0, 5);
}
return numberAsText.TrimEnd('.').PadLeft(5);
}
}
然后,用途将是:
double myDouble = 12345.6789D;
string formattedValue = myDouble.FormattedTo5();
通常这一规则适用于外汇市场,我将其发展如下:
if (number < 1)
cell.Value = number.ToString("0.00000");
else if (number < 10)
cell.Value = number.ToString("0.0000");
else if (number < 100)
cell.Value = number.ToString("00.000");
else if (number < 1000)
cell.Value = number.ToString("000.00");
else if (number < 10000)
cell.Value = number.ToString("0000.0");
else if (number < 100000)
cell.Value = number.ToString("00000");
if(数字<1)
cell.Value=number.ToString(“0.00000”);
否则,如果(数字<10)
cell.Value=number.ToString(“0.0000”);
否则,如果(数量<100)
cell.Value=number.ToString(“00.000”);
否则,如果(数量<1000)
cell.Value=number.ToString(“000.00”);
否则,如果(数量<10000)
cell.Value=number.ToString(“0000.0”);
否则,如果(数量<100000)
cell.Value=number.ToString(“00000”);
那么-11111
呢?它应该是11111
“看起来应该是一个非常标准的做法”-实际上不是。通常的做法是排列小数点…而100.1不应该是100.2?如果你有一个大于5位的数字怎么办?123456是如何处理的?是12345吗?或者它只是超出了范围?@HaemEternal听起来像是Harpo只是希望数字被舍入,没有舍入。是的,这给了我所需要的,是的,我必须添加更多的逻辑来处理舍入。谢谢你。这将使我到达我需要去的地方。也许第一个if(number<0)
应该是if(number<1)
是的,你是对的,我已经修改了它。谢谢!