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)
我正在使用 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)