2017-07-31 139 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)