什么是最干净、最易读的 String.Format 具有以下标准的小数的方法
- 以符号(+ 或 -)开头
- 固定数量的小数位数
- 没有小数分隔符
- 右对齐
- 预填充“0”
例如
- 123,45 将变为“+0012345”
- -1123,45 将变为“-0112345”
什么是最干净、最易读的 String.Format 具有以下标准的小数的方法
例如
您几乎肯定希望将自定义数字格式字符串传递给String.Format方法。
自定义格式字符串可以包含 2 个部分(第一个用于正格式,第二个用于负格式),您可以为其提供文字+
或-
. 因此,要使用 7 个字符的零填充格式化,这类似于:
String.Format("{0:'+'0000000;'-'0000000}",yourValue);
但是,这会截断小数,因此您的输入给出
123.45 --> +0000123
-1123.45 --> -0001123
一个简单的解决方案是将您的数字乘以 100(将小数位数固定为 2),然后再将其传递给上面
现场示例:http ://rextester.com/SZR8690 (C# - 对不起,但只有演示的想法)
然后可以将其包装到扩展方法中:
<Extension()>
Public Function ToFixedFormat(ByVal value As Decimal, ByVal numFractionalDigits As Integer)
Return String.Format("{0:'+'0000000;'-'0000000}",value * Math.Pow(10,numFractionalDigits))
End Function
现场示例:http ://rextester.com/LSAAA60214 (VB.NET)
也许有更好的东西,因为它看起来有点笨拙,但它确实有效。
我指定正负格式以强制正数和固定大小字符串的加号。然后我使用InvariantCulture
来强制该点作为小数分隔符(我也可以使用其他文化)。最后一步是删除点。
Dim value = -1123.45
Dim formatted = value.ToString(
"+00000.00;-00000.00",
System.Globalization.CultureInfo.InvariantCulture)
formatted = formatted.Replace(".", "")
如您所见,我不知道如何指定无小数分隔符。