3

什么是最干净、最易读的 String.Format 具有以下标准的小数的方法

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

例如

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

2 回答 2

6

您几乎肯定希望将自定义数字格式字符串传递给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)

于 2012-06-26T10:50:55.957 回答
3

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

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

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

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

于 2012-06-26T10:49:36.503 回答