基本上我正在尝试以与
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”)
希望有帮助