Vb6 如何修剪小数点后的零值

Vb6 如何修剪小数点后的零值,vb6,Vb6,当我试着调试时,我发现:就像我输入的一样 Dim value As Double value = 0.90000 然后按enter键,它会自动转换为0.9 在VisualBasic中,它不应该保持双精度吗 对于我的计算,我绝对需要显示精度不,它不应该保持精度。二进制浮点值不保留此信息。。。这样做会有点奇怪,因为你在一个基中表示值,即使它在另一个基中表示 我不知道VB6是否有十进制浮点类型,但这可能是您想要的,或者是定点十进制类型。当然,在.NET中,System.Decimal从.NET 1.

当我试着调试时,我发现:就像我输入的一样

Dim value As Double
value = 0.90000
然后按enter键,它会自动转换为0.9

在VisualBasic中,它不应该保持双精度吗


对于我的计算,我绝对需要显示精度

不,它不应该保持精度。二进制浮点值不保留此信息。。。这样做会有点奇怪,因为你在一个基中表示值,即使它在另一个基中表示

我不知道VB6是否有十进制浮点类型,但这可能是您想要的,或者是定点十进制类型。当然,在.NET中,
System.Decimal
从.NET 1.1开始保留了额外的0。如果这对您没有帮助,您可以考虑记住两个整数,例如本例中的“90000”和“100000”,以便您所表示的值是一个整数除以另一个整数,并具有相关的精度级别


编辑:我认为
货币
可能是您想要的,但是,它固定在小数点后4位,您试图保留5位。如果你总是想要小数点后5位的话,你可能只需要乘以10就可以了——但是记住在任何地方都要这样做是件很尴尬的事情。。。你必须找到合适的格式。我猜想,即使您指定的小数位数更少,它也将始终是4位小数。因此,如果您希望“0.300”与“0.3000”不同,则
货币
可能不合适。不过,我完全是基于在线文章…

如果需要精确性,那么货币数据类型就是您想要使用的。

至少有两种表示您的价值的方法。一个是你在屏幕上看到的值——一个字符串——一个是内部表示——一个二进制值。在处理分数值时,两者往往不相等,如果它们不相等,那是因为它们不可能相等

如果您坚持使用双精度,VB将在整个计算过程中保持53位尾数,无论它们在打印时如何显示。如果您通过字符串域进行转换,比如保存到文件或数据库,然后再进行检索,则通常需要保留一些精度。这是不可避免的,因为这两个领域之间的接口并不完美。一些可以精确表示为字符串(或小数,即十的幂)的值不能精确表示为2的分数幂

这与VB无关,这是浮点运算的本质。您所能做的最好的事情就是控制舍入发生的位置。为此,您的朋友是Format函数,它控制值如何以字符串形式显示


??格式$(0.9,“0.00000”)将向您展示一个示例。

您在屏幕上看到的内容与在双精度中设置的数字位相混淆

VB只是“有帮助”,只是去掉多余的零。但是出于所有的意图和目的

0.9
与相同

0.90000
如果您不相信我,请尝试进行以下比较:

Debug.Print CDbl("0.9") = CDbl("0.90000")
如前所述,可以使用Format$()函数显示显示的精度,例如

Debug.Print Format$(0.9, "0.00000")

您也可以将值输入为0.9 35;。这有助于避免表达式中可能截断预期精度的隐式强制。但在大多数情况下,编译器不需要此提示,因为浮点文本默认为双精度(事实上,IDE通常会删除#符号,除非该值是整数,例如9#

对比以下结果:

MsgBox TypeName(0.9)
MsgBox TypeName(0.9!)
MsgBox TypeName(0.9@)

您可以尝试将其存储为字符串吗?然后在必要时施展…@Longball-出于对编程的热爱,请不要建议这样做。顺便说一句,这是visual basic应用程序,而不是。NETSee我的答案-它看起来固定在小数点后4位。不知怎的,我感觉他们不会滚动自己的
十进制
对象。我想说的是,
Currency
可能是他们唯一的选择。@chaospandio:我们对需求的了解还不够多(特别是与实现它们的可用时间相比,这些需求有多强)——除此之外,
Currency
似乎不是100%合适的。当然,它可能是VB中最接近的一个。我敢打赌,我们也可以同意,
货币
的设计应该更加通用。高精度不仅适用于财务计算。