当前位置: 代码迷 >> VFP >> 临时表中小数位数的有关问题
  详细解决方案

临时表中小数位数的有关问题

热度:4011   发布时间:2013-02-26 00:00:00.0
临时表中小数位数的问题
临时表内容:
名称   数量    单价      金额 
石头   2.00    10.0000   20.0000
小石头 3.00     5.5000   15.0000
大石头 3.50    15.0500   52.6750

就列以上三条记录

我要的结果是:
名称   数量    单价      金额 
石头   2      10        20.00
小石头 3      5.5       15.00
大石头 3.5    15.05     52.68

If 字段类型 $ 'INY'
  If 表中所有字段中只要字段名包含'金额'二字
     全部四舍五入为2位有效数字
  Else
     其他字段必须去掉小数点后面无效的0,如3.00变成3,意思就是把后面的0去掉但不改变其值.
     还要保存到表中,(这里我发现不行,不知道各位有没有什么好的主意??????????????????)
  EndIf
EndIf
------解决方案--------------------------------------------------------
VFP9.0函数
ROUND( ) 函数 
 
返回四舍五入到指定小数位数的数值表达式。
 
ROUND(nExpression, nDecimalPlaces)

参数
nExpression :指定要四舍五入的数值表达式。 
nDecimalPlaces :指定 nExpression 四舍五入到的小数位数。
如果 nDecimalPlaces 为负数,则 ROUND( ) 返回的结果在小数点左端包含 nDecimalPlaces 个零。例如,如果 nDecimalPlaces 为 -2,那么小数点左端的第一和第二个数字均为 0。 
返回值:数值型。
ROUND( ) 返回的值有 nDecimalPlaces 个小数位。

说明
ROUND( ) 忽略由 SET DECIMALS 命令指定的小数位。为了在 ROUND( ) 中显示超过 nDecimalPlaces 小数位数的数,要使用 SET FIXED ON 与 SET DECIMALS。

示例
下面示例使用 SET DECIMALS 和 SET FIXED 命令显示四位小数的值,然后使用 CLEAR 命令对 Visual FoxPro 主窗口清屏,用 ? 命令显示 ROUND( ) 函数执行四舍五入的结果,最后示例使用 SET DECIMALS 和 SET FIXED 恢复初始值。

SET DECIMALS TO 4
SET FIXED ON     
CLEAR
? ROUND(1234.1962, 3) && Displays 1234.196
? ROUND(1234.1962, 2) && Displays 1234.20
? ROUND(1234.1962, 0) && Displays 1234
? ROUND(1234.1962, -1)  && Displays 1230
? ROUND(1234.1962, -2)  && Displays 1200
? ROUND(1234.1962, -3)  && Displays 1000
SET FIXED OFF  
SET DECIMALS TO 2
 

------解决方案--------------------------------------------------------
你的要求很特别,没有什么意义。
存储不用管,只在显示时改变一下,间接达到你的效果。
*-- vfp9.0,以下结果为了符型

lnNum=1230.00
?Iif(Int(lnNum)=lnNum,Transform(lnNum),Rtrim(Transform(lnNum),'0')) && 结果为 1230

lnNum=1230.10
?Iif(Int(lnNum)=lnNum,Transform(lnNum),Rtrim(Transform(lnNum),'0')) && 结果为 1230.1

lnNum=9420.51780
lnNum=Round(lnNum,2)
?Iif(Int(lnNum)=lnNum,Transform(lnNum),Rtrim(Transform(lnNum),'0')) && 结果为 9420.52

lnNum=0.23000
?Iif(Int(lnNum)=lnNum,Transform(lnNum),Rtrim(Transform(lnNum),'0')) && 结果为 0.23

lnNum=5.0
?Iif(Int(lnNum)=lnNum,Transform(lnNum),Rtrim(Transform(lnNum),'0')) && 结果为 5
  相关解决方案