c# – 用数字分组格式化十进制数并限制位数

前端之家收集整理的这篇文章主要介绍了c# – 用数字分组格式化十进制数并限制位数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
基本上我正在尝试以与 Windows计算器完全相同的方式执行数字格式化.因此,我的要求是:

>将显示数字的数量限制为最大值(例如16).我能够使用number.ToString(“G16”)来完成.
>将数字分组添加到号码.我可以使用:number.ToString(String.Format(“#,0. {0}; – #,0. {0}”,New String(“#”c,15)))

任何关于如何将这些组合在一起的想法得到与Windows计算器相同的行为?

一些具有所需输出的示例:

我在下面添加了一个答案,如果使用一个字符串格式化无法实现所需的输出,我将使用它.如果您认为没有直接的方式实现这一点(这是我的原始要求),请随时建议对该答案进行任何优化/更改

对不起,如果我对任何人造成某种混乱.我只是想,可能有一个简单的一个字符串格式来实现这一点,而且我仍然很想知道这是否是真的.

解决方法

经过很多关于这个问题的搜索.您不能使用单一格式执行此操作,因为您询问IF .. ELSE LOGIC不是单向格式化(对数字执行两种格式化)
IF d.ToString("G16") contains scientific notation

    ... do something

ELSE

    ... group digits

所以你必须使用IF来实现这一点

Str = If( num.ToString("G15").Contains("e"),num.ToString("G15"),num.ToString(String.Format("#,0.{0};-#,0.{0}",New String("#"c,15))))

UPDATE1

根据您的更新使用以下

Public Function FormatDouble(ByVal dbl As Double,ByVal len As Integer) As String

    Return Double.Parse(dbl.ToString("G" & len)).ToString("#,#.#".PadRight(len,"#"),System.Globalization.CultureInfo.InvariantCulture)

End Function

> dbl.ToString(“G”&len)将dbl格式化为固定长度= len
> Double.parse将结果再次转换为新长度的两倍.注意:如果结果包含e,解析后将被删除
> ToString(“#,#.#”.PadRight(len,“#”),System.Globalization.CultureInfo.InvariantCulture)正在向所生成的双数字添加组数字

注意

当提供长度(“G15”)时,它会绕它的数字.它可能会减小小数部分的长度,但不能从整数转换到指定长度.即1734.Tostring(“G1”)将返回2000而不是2 / 1734.Tostring(“G2”)将返回1700而不是17

如果你想减少数字,你必须使用字符串函数,如Substring和Left后Tostring(“G1”)

希望有帮助

猜你在找的C#相关文章