微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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”)

希望有帮助

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐