我使用Visual FoxPro,我需要将货币金额转换为数字。表中的2列是tranamt(数字,12,2)和tranamt2(字符)
这是我的榜样:
tranamt2 = - $ 710,000.99
我已经尝试了
replace all tranamt with val(tranamt2)
和
replace all tranamt with val(strtran(tranamt2, ",",""))
两个结果都给我零。我知道它与负号有关,但我无法弄明白。任何帮助表示赞赏。
答案 0 :(得分:2)
试试这个:
replace all tranamt with VAL(STRTRAN(STRTRAN(tranamt2, "$", ""), ",", ""))
一次性删除美元符号和逗号。
答案 1 :(得分:1)
需要将货币金额转换为数字
tranamt(数字,12,2)和tranamt2(字符)
首先,字符字段类型和数字字段类型(tranamt2)都不是VFP 货币字段类型
您可能正在使用“字符”字段的值来表示货币,但这不会使其成为货币值 - 只是一个字符串值。
通常在完成后,您不会将美元符号'$'和逗号','存储为数据的一部分。
相反,您存储“原始”值(在这种情况下:“ - 710000.99”),并且只是格式化“原始”值在需要时的显示方式。
因此,在您的角色字段中,您的值为: - $ 710,000.99
你有美元符号'$'和逗号','作为现场数据的一部分?
如果是这样,要将其转换为数字,首先必须在转换之前消除这些无关的字符
如果它们不是作为字段值的一部分存储的,那么您可以按原样使用VAL()。
示例:
cStr = "-$710,000.99" && Note both '$' and ',' are part of data value
* --- Remove both '$' and ',' and convert with VAL() ---
nStr = VAL(STRTRAN(STRTRAN(cStr,",",""),"$",""))
?nStr
但是,如果您将美元符号和逗号作为字段数据本身的一部分,那么您可以使用STRTRAN()在转换期间消除它们。
示例:
REPLACE tranamt WITH VAL(STRTRAN(STRTRAN(tranamt2,",",""),"$",""))
可能是这样的:
cRemoveChar = "$," && Characters to be removed from String
REPLACE tranamt WITH VAL(CHRTRAN(tranamt2,cRemoveChar,""))
编辑:另一种选择是使用 CHRTRAN()删除'$'和',' 类似的东西:
SELECT Course, Period, Room, concat( Period,' ',Room,' Final') as test, Location, TeacherId, GROUP_CONCAT(StudentId) as Students
FROM cursosv2
GROUP BY Course, Period, test, Room, Location, TeacherID;
祝你好运
答案 2 :(得分:1)
有点晚但我使用这个函数调用
function MoneyToDecimal
LPARAMETER tnAmount
LOCAL lnAmount
IF VARTYPE(tnAmount) = "Y"
lnAmount = VAL(STRTRAN(TRANSFORM(tnAmount), "$", ""))
ELSE
lnAmount = tnAmount
ENDIF
return lnAmount
endfunc
可以通过这些电话进行测试:
wait wind MoneyToDecimal($112.50)
wait wind MoneyToDecimal($-112.50)
答案 3 :(得分:1)
使用内置的MTON()函数将货币值转换为数字值:
replace all tranamt with mton(tranamt2)