如何保留小数点后3位,如果尾数12.2也需要写成12.200
用过format(i,"#0.000")
 formatnumber (i,3)
format(i,"#.000")
好象都不行,是我自己打错了? 谢谢大家

解决方案 »

  1.   

    Private Sub Command1_Click()Dim i As Integer, j As Integer
    i = 2.125
    j = Format(i, "#0.00")
    Print j
    i = FormatNumber(i, 3)
    Print iEnd Sub
    我这样试验,发现不对啊?>
    那位把成功的代码写下啊?谢谢
      

  2.   

    j As string format 用字符型变量
      

  3.   

    Dim a As Single '数据类型
    a = 2.12
    MsgBox Format(a, "0.000")
      

  4.   

    j = Format(i, "#0.00")
    你不是少了个0
    j = Format(i, "#0.000")
      

  5.   

    formatnumber 好象不行吧?
      

  6.   

    j As string format 用字符型变量
    ===============================
    正解
      

  7.   

    'i 的类型定义为Single,不能为Integer
    Dim i As Single , j As string
      

  8.   

    Dim a As Double
        a = 12.2
        MsgBox FormatNumber(a, 3)
    可以啊
      

  9.   

    Round函数
          描述返回一个数值,该数值是按照指定的小数位数进行四舍五入运算的结果。语法Round(expression [,numdecimalplaces])Round函数语法有如下几部分:部分 描述 
    expression 必需的。要进行四舍五入运算的数值表达式。 
    numdecimalplaces 可选的。数字值,表示进行四舍五入运算时,小数点右边应保留的位数。如果忽略,则Round函数返回整数。 
      

  10.   

    FormatNumber函数
          描述返回一个数字格式的表达式。语法FormatNumber(Expression[,NumDigitsAfterDecimal [,IncludeLeadingDigit [,UseParensForNegativeNumbers [,GroupDigits]]]])FormatNumber函数语法有如下几部分:部分 描述 
    Expression 必需的。要被格式化的表达式。 
    NumDigitsAfterDecimal 可选的。数字值,表示小数点右边的显示位数。缺省值为–1,表示使用计算机的区域设置值。 
    IncludeLeadingDigit 可选的。三态常数,表示小数点前是否显示零。关于其值,请参阅“设置值”部分。 
    UseParensForNegativeNumbers 可选的。三态常数,表示是否把负数值放在圆括号内。关于其值,请参阅“设置值”部分。 
    GroupDigits 可选的。的三态常数,表示是否用组分隔符对数字分组,组分隔符在计算机的区域设置值中指定。关于其值,请参阅“设置值”部分。 
    设置值IncludeLeadingDigit、UseParensForNegativeNumbers和GroupDigits参数的设置值如下:常数 值 描述 
    TristateTrue –1 True 
    TristateFalse 0 False 
    TristateUseDefault –2 用计算机区域设置值中的设置值。 
    说明当忽略一个或多个选项参数时,被忽略的参数值由计算机的区域设置值提供。注意   所有设置值信息都来自“区域设置”的“数字”选项卡。
    ---------------------------------------------------------
    VB/VBA编程开发技术交流群: 4218983 欢迎参加讨论!
    ---------------------------------------------------------
      

  11.   

    Format 函数
          返回 Variant (String),其中含有一个表达式,它是根据格式表达式中的指令来格式化的。语法Format(expression[, format[, firstdayofweek[, firstweekofyear]]])Format 函数的语法具有下面几个部分:部分 说明 
    expression 必要参数。任何有效的表达式。 
    format 可选参数。有效的命名表达式或用户自定义格式表达式。 
    firstdayofweek 可选参数。常数,表示一星期的第一天。 
    firstweekofyear 可选参数。常数,表示一年的第一周。 
    设置值firstdayofweek 参数有下面设置:常数 值 说明 
    vbUseSystem 0 使用 NLS API 设置。 
    VbSunday 1 星期日(缺省) 
    vbMonday 2 星期一 
    vbTuesday 3 星期二 
    vbWednesday 4 星期三 
    vbThursday 5 星期四 
    vbFriday 6 星期五 
    vbSaturday 7 星期六 
    firstweekofyear 参数有下面设置:常数 值 说明 
    vbUseSystem 0 使用 NLS API 设置。 
    vbFirstJan1 1 从包含一月一日的那一周开始(缺省)。 
    vbFirstFourDays 2 从本年第一周开始,而此周至少有四天在本年中。 
    VbFirstFullWeek 3 从本年第一周开始,而此周完全在本年中。 
    说明格式化 作法 
    数字 使用预先定义的命名数值格式或创建用户自定义数值格式。 
    日期和时间 使用预先定义的命名日期/时间格式或创建用户自定义日期/时间格式。 
    日期和时间序数 使用日期和时间格式或数值格式。 
    字符串 创建自定义的字符串格式。 
    如果在格式化数字时没有指定 format,Format 会提供与 Str 函数类似的功能,尽管它是国际化的。然而,以 Format 作用在正数上不会保留正负号空间,而以 Str 的话则会。
      

  12.   

    as Integer不行,用single或者double
      

  13.   

    Private Sub Command1_Click()Dim i As Integer, j As Integer
    i = 2.125
    j = Format(i, "#0.00")
    Print j
    i = FormatNumber(i, 3)
    Print iEnd Sub
    我这样试验,发现不对啊?>
    那位把成功的代码写下啊?谢谢
    ---------------------------------首先,用 Single, Double 做 10 进制取舍都是有误差的,因为二进制小数和十进制小数之间不能完全精确转换。这样,在你做大量数据累加后,可能有误差。建议采用 Currency 类型,他是用整数方式保存数值,精确到小数点后 4 位。其次,你混淆了数据存储和显示的区别。一个数值,如果有 4 位小数,经过 FormatNumber(x,3)处理后,就只剩下 3 位小数;但如果它的小数位数小于 3,它不会有任何变化。显示时,也不会追加后缀 0。如果需要在显示时有后缀 0,则需要将数字用 Format 函数转成字符串,然后显示字符串。所以,你的问题有概念性错误。看看下例:
    Dim m As Currency, n As Currency
    Dim s As Stringm = 1.23
    n = FormatNumber(m, 3)MsgBox n                  '1.23s = Format(m, "0.000")
    MsgBox s                  '1.230m = 1.2345
    n = FormatNumber(m, 3)MsgBox n                  '1.235s = Format(m, "0.000")
    MsgBox s                  '1.235
      

  14.   

    Private Sub Command1_Click()Dim i As Single, j As Single
    i = 2.125
    j = Format(i, "#.000")
    Print jPrint iEnd Sub
      

  15.   

    ///////////////////////////////////////////////////////////////
    汗,最简单的方法
    Dim i As Double
    i = 3.1415926
    i = Int(i * 1000) / 1000
    Debug.Print i
    ///////////////////////////////////////////////////////////////
      

  16.   

    format(str,"0.000")楼主你要是没好好看msdn,我鄙视你
      

  17.   

    Round函数描述返回一个数值,该数值是按照指定的小数位数进行四舍五入运算的结果。语法Round(expression [,numdecimalplaces])Round函数语法有如下几部分:部分                   描述 
    expression       必需的。要进行四舍五入运算的数值表达式。 
    numdecimalplaces 可选的。数字值,表示进行四舍五入运算时,小数点右边应保留的位数。如果忽略,则Round函数返回整数。 
      

  18.   

    'Round(expression [,numdecimalplaces])
    Public Function Round(ByVal Number As Currency, Optional ByVal Position As Integer = 4) As Currency   Round = IIf((Number * (10 ^ Position) - Int(Number * (10 ^ Position))) >= 0.5, Int(Number * (10 ^ Position)) + 1, Int(Number * (10 ^ Position))) / (10 ^ Position)
            
    End Function
      

  19.   

    VB本身的Round函数是一种银行式的四舍五入,而大部分的计算当中用不上,所以需要时须自行处理