问题描述
在我的报告中,我得到了字符串中的金额。格式很不寻常:
- "" - 零金额
- "(200.00)" - 是负数
- “1,234.56” - 是正数
我想以更方便的方式将这些字符串转换为数值:
- 0.00
- -200.00
- 1234.56
首先,我正在对字符串数量进行一些预格式化:
local stringvar amount := Trim({PLD__ITEMS.F_18});
if amount = ''
then amount := '0.00'
;
amount := Replace(amount, "(", "-");
amount := Replace(amount, ")", "");
amount := Replace(amount, ",", "");
amount := Replace(amount, " ", "");
然后我想使用ToNumber或CDbl方法将字符串转换为数字,但都产生相同的错误
// "The string is non-numeric"
//ToNumber(amount)
// "The string is non-numeric"
//CDbl(amount)
我不知道什么可能导致这个错误。
我在格式化的金额中找不到任何损坏的字符串...
问题
- 如何修复我的字符串数量以使ToNumber和CDbl 正常工作?
- 如何在不使用ToNumber或CDbl方法的情况下将字符串数量转换为十进制数?
如果只有显示问题,我可以使用字符串,但我需要对这些数量进行一些计算,所以我必须在那里使用数值。
测试字符串数量中的意外字符
我准备了具体的测试,看看是否有任何字符串量值里面有意外字符,但下面比较的所有结果都返回了True
// ---- test ----
amount := Replace(amount, "0", "");
amount := Replace(amount, "1", "");
amount := Replace(amount, "2", "");
amount := Replace(amount, "3", "");
amount := Replace(amount, "4", "");
amount := Replace(amount, "5", "");
amount := Replace(amount, "6", "");
amount := Replace(amount, "7", "");
amount := Replace(amount, "8", "");
amount := Replace(amount, "9", "");
amount := Replace(amount, ".", "");
amount := Replace(amount, "-", "");
// has not unexpected characters
amount = ''
// ---- end test ----
测试转换
我测试了以点为小数点分隔符的字符串的显式转换,再次发生错误(这对我来说很奇怪)!
我正在使用水晶报表 2013