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

希望有帮助

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...