使用字符串格式格式化双精度变量以从右侧添加最多 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
示例应该是什么样子,但既然您没有问,我我不会猜的。
我得到一个价格小数,有时可以是 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
示例应该是什么样子,但既然您没有问,我我不会猜的。