FormatNumber用0替换数字

问题描述 投票:0回答:1

不理解这一点:从DataReader返回的数字:185549633.66000035

我们要求保持每个用户选择的小数位数。

例如:维持7个位置。

我们正在使用:

FormatNumber(dr.Item("Field"), 7, TriState.false, , TriState.True)

其结果是:185,549,633.6600000。我们想在最后维持3(或35)。

当从得到的查询中减去两个数字时,我们得到一个增量但是试图将这两个数字显示为6,7,8个数字不起作用,从而向用户指示错误的增量。

任何意见,将不胜感激。

vb.net formatting decimal
1个回答
1
投票

根据我的测试,你必须使用Double值而不是Decimal。毫不奇怪,您可以在文档中找到问题的解决方案。

首先,你不应该使用FormatNumber。我们不再是VB6了ToTo。要在VB.NET中格式化数字,请在该数字上调用ToString。我测试了这个:

Dim dbl = 185549633.66000035R
Dim dec = 185549633.66000035D

Dim dblString = dbl.ToString("n7")
Dim decString = dec.ToString("n7")

Console.WriteLine(dblString)
Console.WriteLine(decString)

我看到你描述的行为,即输出是:

185,549,633.6600000
185,549,633.6600004

我阅读了Double.ToString方法的文档(注意FormatNumber将在内部调用ToString),这就是它所说的:

默认情况下,返回值仅包含15位精度,但内部最多保留17位数。如果此实例的值大于15位,ToString将返回PositiveInfinitySymbol或NegativeInfinitySymbol而不是预期的数字。如果您需要更高的精度,请指定格式为“G17”格式规范,它始终返回17位精度,或“R”,如果数字可以用该精度表示,则返回15位数,如果数字只能表示,则返回17位数以最大精度表示。

然后我测试了这个:

Dim dbl = 185549633.66000035R

Dim dblString16 = dbl.ToString("G16")
Dim dblString17 = dbl.ToString("G17")

Console.WriteLine(dblString16)
Console.WriteLine(dblString17)

结果是:

185549633.6600004
185549633.66000035
© www.soinside.com 2019 - 2024. All rights reserved.