FoxPro 将货币转换为数字

FoxPro convert currency to numeric

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

这是我的例子:

tranamt2=-710,000.99 美元

我试过了

replace all tranamt with val(tranamt2)

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

两个结果都给我零。我知道这与负号有关,但我无法弄清楚。感谢任何帮助。

试试这个:

replace all tranamt with VAL(STRTRAN(STRTRAN(tranamt2, "$", ""), ",", ""))

这会一次性删除美元符号和逗号。

need to convert currency amount into numeric
tranamt(numeric,12,2) and tranamt2(character)

首先,字符字段类型和数字字段类型 (tranamt2) 都不是 VFP 货币字段类型
您可能正在使用字符字段的值来表示货币,但这并不能使它成为货币值 - 只是一个字符串值。
通常,完成后,您不会将美元符号“$”和逗号“,”存储为数据的一部分。
相反,您存储 'raw' 值(在本例中为:“-710000.99”),并仅在需要时格式化 'raw' 值的显示方式。

因此在您的字符字段中,您的值为:-$710,000.99
您是否将美元符号“$”和逗号“,”作为字段数据的一部分?
如果是这样,要将其转换为数字,您首先必须在转换之前消除那些无关的字符。
如果它们没有存储为您的字段值的一部分,那么您可以使用 VAL() 'as is'。

示例:

cStr = "-710000.99"  && The '$' and ',' are NOT stored as part of Character value
nStr = VAL(cStr)
?nStr

但是,如果您将美元符号和逗号作为字段数据本身的一部分,那么您可以在转换过程中使用 STRTRAN() 来消除它们。

示例:

cStr = "-0,000.99"  && Note both '$' and ',' are part of data value
* --- Remove both '$' and ',' and convert with VAL() ---
nStr = VAL(STRTRAN(STRTRAN(cStr,",",""),"$",""))  
?nStr

可能是这样的:

REPLACE tranamt WITH VAL(STRTRAN(STRTRAN(tranamt2,",",""),"$",""))

编辑:另一种选择是使用 CHRTRAN() 删除 '$' 和 ','
类似于:

cRemoveChar = "$,"   && Characters to be removed from String
REPLACE tranamt WITH VAL(CHRTRAN(tranamt2,cRemoveChar,""))

祝你好运

有点晚了但是我用这个函数调用

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(2.50)
wait wind MoneyToDecimal($-112.50)

使用内置的 MTON() 函数将货币值转换为数值:

replace all tranamt with mton(tranamt2)