带有符号的String.Format十进制,固定的小数位数,无小数点分隔符

时间:2012-06-26 10:12:23

标签: .net vb.net decimal string.format

String.Format是一种最干净,最易读的方法,具有以下标准的小数

  • 以符号(+或 - )
  • 开头
  • 固定数量的小数位数
  • 无小数点分隔符
  • 右对齐
  • 预先填上“0”的

例如

  • 123,45将成为“+0012345”
  • -1123,45将变为“-0112345”

2 个答案:

答案 0 :(得分:6)

您几乎肯定希望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)

答案 1 :(得分:3)

也许有更好的东西,因为它看起来有点笨拙,但它确实有用。

我指定正面和负面格式来强制执行正数和固定大小字符串的加号。然后我使用InvariantCulture强制点作为小数分隔符(我也可以使用其他文化)。最后一步是删除该点。

Dim value = -1123.45
Dim formatted = value.ToString(
        "+00000.00;-00000.00",
        System.Globalization.CultureInfo.InvariantCulture)
formatted = formatted.Replace(".", "")

如您所见,我不知道如何指定小数点分隔符。