【问题标题】:Decimals in Visual Basic 6.0Visual Basic 6.0 中的小数
【发布时间】:2018-11-23 08:59:57
【问题描述】:

我需要将 45.556 显示为 45.55 我需要在真正的 dbgrid pro 7.0 中使用什么格式。

【问题讨论】:

  • 你的舍入算法到底是什么?总是向下取整?总是向零舍入?截断到小数点后 2 位?删除“最后一个”有效数字?总是显示值 45.55? ;-)
  • 有关灵感,请参阅:support.microsoft.com/kb/196652“如何实施自定义舍入程序”
  • 更正:格式从零开始四舍五入,根本不是银行家!

标签: vb6


【解决方案1】:

抱歉不熟悉dbgird pro 7.0。如果您不想像示例中显示的那样截断 6(四舍五入 45.556 是 45.56),您可以使用 format 命令,它将您的数字格式化为两位小数,并相应地四舍五入。

format(*value*, "0.00")

使用“0.00”将数字格式化为在零所在的位置默认为零。
使用“#.##”将数字格式化为默认为空格(无)

如果您不想对数字进行四舍五入,而只想得到该数字加上右边两位小数。

Left(cStr(value), instr(cStr(value), ".") + 2))

从左边检索您的数字加上小数点后的 2,截断其余部分。您可能不需要 cStr(),因为 VB 可能会先显式转换它。
使用 cStr() 可能会在来自减号的数字之前创建一个空格,如果您在网格中看到此问题,format() 不会这样做。

【讨论】:

  • 小注释:如果您不想显示尾随零,请使用"0.##"0. 之前是必需的,因为如果你有数字0.010 你会得到,01。将 #. 更改为 0. 将解决此问题
【解决方案2】:

要通过网格属性处理此问题,请设置列的 NumberFormat = Fixed,除非它是货币值,否则您应该使用 Currency。

【讨论】:

    【解决方案3】:

    可选地,不会导致在欧洲国家/地区爆炸的字符串操作(使用 a ,而不是 a . 作为小数位)...但是,如果 floatval 和 decimalPlaces > 9 的任何组合,您将有溢出问题...

    Public Function Floor(ByVal floatval As Double, optional decimalPlaces as Long = 0) As Long
        Dim intval As Long
        intval = Round(floatval)
        If intval > floatval Then 
             intval = intval - 1
        End If
    
        if decimalPlaces > 0 then
            floatval = float / (10 ^ decimalPlaces)
        end if
    
        Floor = intval
    End Function
    

    【讨论】:

      【解决方案4】:

      实际上,您可以通过两种不同的方式来实现不同的结果。我们将取点符号“。”之后的前两位数字。得到结果: 45.55 / 45.556

      Dim a As Double  'This must be DOUBLE not long
      a = 45.556
      
      MsgBox Left(a, InStr(a, ".") + 2) 'Result: 45.55
      

      以编程方式是 100% 正确,但从逻辑上讲,上面的结果是错误的 45.556 应该是 45.56,因为我们要删除的最后一个数字大于 10 中的 5,即 6,所以我们必须在前一个数字上加 1这是 5 是 6 的结果:45.56。是数学不是我。 另一种方法会给我们需要数字长度的正确结果:

      Dim a As Double 'This must be DOUBLE not long
      a = 45.556
      
      MsgBox Format(a, "#.##") 'Result: 45.56
      

      在“.”之前使用一个#就足够了,但是在“.”之后我们添加#作为我们需要显示的位数。

      【讨论】:

        【解决方案5】:

        你可以使用:

        fix(45.556*100)/100
        

        45.55

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-11-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-26
          相关资源
          最近更新 更多