临时表内容:
名称 数量 单价 金额
石头 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