使用字符串格式格式化双精度变量以从右侧添加最多 3 个零

Formatting a double variable using String Format to add up to 3 zero from the right

我得到一个价格小数,有时可以是 0.00002001 或 0.00002。 如果数字类似于 0.00002,我想始终从右边显示 3 个零,所以我希望它是 0.00002000。如果数字是 0.00002001,则不要添加任何内容。 我在 msdn 中遇到了一些 examples and other examples 并尝试了

price.ToString.Format("{0:F4}", price)

但它实际上并没有改变数字中的任何内容。 在这种情况下,数字类似于 123456789,我希望它显示 123.456.789,我已经使用 ToString("N2") 解决了一半,但它还显示了我不想要的 .00 小数。

小数和整数之间有些特殊情况,需要区别对待。

Private Function formatWithTrailingZeros(number As Double) As String
    If number Mod 1 > 0 Then ' has a fractional component
        Return $"{number:0.00000000}"
    Else
        Dim formattedString = $"{number:N2}"
        Return formattedString.Substring(0, formattedString.Length - 3)
    End If
End Function
Dim price = 0.00002001
Console.WriteLine(formatWithTrailingZeros(price))
price = 0.00002
Console.WriteLine(formatWithTrailingZeros(price))
price = 123456789
Console.WriteLine(formatWithTrailingZeros(price))
price = 123456789.012345
Console.WriteLine(formatWithTrailingZeros(price))

0.00002001
0.00002000
123,456,789
123456789.01234500

如果你的第二种情况 123.456.789 不是基于你当前的文化,那么你可能需要将 , 替换为 . 例如

Return formattedString.Substring(0, formattedString.Length - 3).Replace(",", ".")

由于您同时使用 . 作为小数分隔符和千位分隔符,我不确定我的 123456789.012345000 示例应该是什么样子,但既然您没有问,我我不会猜的。