ColdFusion在通过SerializeJSON和deSerializeJSON传递给JS时将字符串转换为数字。
只有在两组数字之间使用'E'时才会发生这种情况。像3E6,65E3,56e45等。这是cfscript中的代码。
x = "2e9";
writedump(SerializeJSON(x));
writedump(deSerializeJSON(SerializeJSON(x)));
Output:
2.0E9 2000000000
请提出建议,如果有其他方法可以解决此类问题。
答案 0 :(得分:8)
就是这样:https://bugbase.adobe.com/index.cfm?event=bug&id=3695627:" SerializeJSON将看起来像科学记数法的字符串变成浮点数。"
它是CF9中的已知错误,已在CF10中修复。
与此同时,你只需要用字符串填充字符串,迫使ColdFusion不要将其视为科学记数法中的数字。
或者升级到CF10(CF9下个月寿命结束,顺便说一下)。或者到Railo。
答案 1 :(得分:0)
我已使用以下解决方案解决了此问题
假设ItemUnit = 12E45
stcReturn.firstname = "Yes";
stcReturn.lastname = "Man";
stcReturn.ItemUnit = "12E45"
deSerializeJSON stcReturn.ItemUnit = 12e + 46后输出错误
<cfset stcReturn.ItemUnit = ItemUnit />
<cfset StructSetMetaData(stcReturn.ItemUnit, {ItemUnit :
{"type":"string","name":"ItemUnit"}})/>
deSerializeJSON(stcReturn)
正确的输出:12E45