【发布时间】:2012-06-26 10:12:23
【问题描述】:
什么是最简洁、最易读的 String.Format 使用以下标准的小数
- 以符号(+ 或 -)开头
- 固定的小数位数
- 没有小数分隔符
- 右对齐
- 预填充“0”
例如
- 123,45 将变为“+0012345”
- -1123,45 将变为“-0112345”
【问题讨论】:
标签: .net vb.net decimal string.format
什么是最简洁、最易读的 String.Format 使用以下标准的小数
例如
【问题讨论】:
标签: .net vb.net decimal string.format
您几乎肯定希望将Custom numeric format string 传递给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)
【讨论】:
String.Format 唯一不能做的部分(无论如何都没有小数分隔符)所以你的两个选择是替换小数位(根据@Tim 的回答)或乘以 10 的 n 次方(根据我的回答)。
也许有更好的东西,因为它看起来有点笨拙,但它确实有效。
我指定正负格式来强制正数和固定大小字符串的加号。然后我使用InvariantCulture 将点强制为小数分隔符(我也可以使用其他文化)。最后一步是删除点。
Dim value = -1123.45
Dim formatted = value.ToString(
"+00000.00;-00000.00",
System.Globalization.CultureInfo.InvariantCulture)
formatted = formatted.Replace(".", "")
如您所见,我不知道如何指定 no 小数分隔符。
【讨论】: