2017-07-31 221 views
2

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

这里是我的例子:

tranamt2 = - $ 710,000.99

我已经试过

replace all tranamt with val(tranamt2)

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

两个结果都给我零。我知道这与负面信号有关,但我无法弄清楚。任何帮助表示赞赏。

回答

2

试试这个:

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

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

+0

我不得不添加VAL()的前面,但它工作,谢谢。 – Nick

+0

是的,我注意到我错过了并编辑它,但显然它没有及时获得批准。很高兴工作! – Steve

1

需要货币金额转换成数字
tranamt(数字,12,2)和tranamt2(人物)

首先一个既不是字符字段类型,也不是一个数字字段类型(tranamt2)不是VFP 货币字段类型
您可能正在使用字段字段的值来表示货币,但这不会使其成为货币值 - 只是字符串值。
通常当这样做完成后,您不会将美元符号'$'和逗号'''作为数据的一部分存储。
而是存储“原始”值(在本例中为“-710000.99”),并且只需要格式化该“原始”值在需要时的显示方式。

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

实施例:

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

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

例子:

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 

也许是这样的:

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

编辑:另一种方法是使用CHRTRAN()删除 '$' 和 ''
东西如:

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

好运

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)