【发布时间】:2016-05-12 16:11:08
【问题描述】:
ColdFusion 认为10090000000557765 = 10090000000557763。
我明白为什么,但我需要知道 ColdFusion 的最佳方法是知道它们不一样。我读到了Compare() 方法,但它也返回true。我已将它们转换为字符串并返回 true。
我想过编写一个自定义函数将字符串分成两部分,分别比较每个部分,然后返回真/假,但这似乎很愚蠢。
我尝试了以下方法:
Val(a) EQ Val(b)
ToString(a) EQ ToString(b)
a.compareTo(b)
澄清一下。我正在使用我无法控制的使用 bigint 的数据库。我很早就知道 Javascript 无法处理这些,所以我将模型中的所有 bigint 字段都转换为 varchar。然而,现在 CF 在比较字符串时遇到问题,我似乎无法将它们转换回数字。
我刚刚做的例子:
<cfif '10090000000557765' EQ '10090000000557763'>
True
<cfelse>
False
</cfif>
在 http://cflive.net/ 上,它返回 true。见我的笔记。在数据库中,它们是 bigint。取出它们时,我不得不将它们转换为 VarChar,因为 Javascript 无法处理 bigint,但它可以很好地处理字符串。
【问题讨论】:
-
显示您用来比较它们的代码。
-
我想过在字符串中添加更多随机字母以使其更加不同或使其成为哈希或其他东西,但那些看起来我仍然可能遇到同样的问题。在我的模型中,我已经将所有这些都转换为字符串,因为 javascript 也存在问题。当它们是我认为的数字时,ColdFusion 似乎处理得更好。似乎 CF 喜欢 bigint 但 Javascript 不喜欢。现在它们是字符串,ColdFusion 中的比较被破坏了,我无法将它们转换回数字。
-
我刚刚尝试过
hash(a) EQ hash(b)并且可行,但似乎 CF 应该内置一些东西来处理这个问题。 -
我偶尔会看到
precisionEvaluate()这个词出现在这样的问题中。 -
另外,为了不忽略显而易见的......像Long.compareTo()这样的java方法返回-1、0或1。仔细检查您是否使用正确的表达式来测试相等性。即只有当结果为
0时才认为值相等。
标签: coldfusion precision bigint