FoxPro将货币转换为数字

时间:2017-07-31 16:14:15

标签: visual-foxpro replaceall

我使用Visual FoxPro,我需要将货币金额转换为数字。表中的2列是tranamt(数字,12,2)和tranamt2(字符)

这是我的榜样:

tranamt2 = - $ 710,000.99

我已经尝试了

replace all tranamt with val(tranamt2)

replace all tranamt with val(strtran(tranamt2, ",",""))

两个结果都给我零。我知道它与负号有关,但我无法弄明白。任何帮助表示赞赏。

4 个答案:

答案 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)