不理解这一点:从DataReader返回的数字:185549633.66000035
我们要求保持每个用户选择的小数位数。
例如:维持7个位置。
我们正在使用:
FormatNumber(dr.Item("Field"), 7, TriState.false, , TriState.True)
其结果是:185,549,633.6600000。我们想在最后维持3(或35)。
当从得到的查询中减去两个数字时,我们得到一个增量但是试图将这两个数字显示为6,7,8个数字不起作用,从而向用户指示错误的增量。
任何意见,将不胜感激。
根据我的测试,你必须使用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