gpt4 book ai didi

ColdFusion 大数比较

转载 作者:行者123 更新时间:2023-12-04 02:13:15 27 4
gpt4 key购买 nike

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,但它可以很好地处理字符串。

最佳答案

简短回答: 为了不忽略显而易见的,像 Long.compareTo() 之类的 java 方法返回 -101 。确保您使用正确的表达式来测试相等性。当值相等时,结果将是 0。 (零 (0) 在 CF 中计算为 false)。

更长的答案:
如何存储、检索和具体评估值在这里非常重要。你提到的所有方法在 CF11 下对我来说都很好(除了 val ,原因很明显)。这表明您的代码或环境有所不同。

例如,使用 CF11 和 SQL Server:

CREATE TABLE test
(
bigIntValue1 BIGINT
, bigIntValue2 BIGINT
, varcharValue1 VARCHAR(50)
, varcharValue2 VARCHAR(50)
)

以下测试代码:
writeOutput("<br>qry.bigIntValue1: "&  val(qry.bigIntValue1) );
writeOutput("<br>qry.bigIntValue2: "& val(qry.bigIntValue2) );
writeOutput("<br>BigInt Val(): "& ( val(qry.bigIntValue1) eq val(qry.bigIntValue2)) );
writeOutput("<br>Varchar Val(): "& ( val(qry.varcharValue1) eq val(qry.varcharValue2)) );
writeOutput("<br>Long.compareTo: "& qry.bigIntValue1[1].compareTo(qry.bigIntValue2[1]));
writeOutput("<br>Varchar.compareTo: "& qry.varcharValue1[1].compareTo(qry.varcharValue2[1]));
writeOutput("<br>Compare(Long, Long) "& compare(qry.bigIntValue1, qry.bigIntValue2));
writeOutput("<br>Compare(Varchar, Varchar) "& compare(qry.varcharValue1, qry.varcharValue2));

产生这些结果:
val(qry.bigIntValue1):     1.00900000006E+016
val(qry.bigIntValue21): 1.00900000006E+016
BigInt Val(): YES
Varchar Val(): YES

Long.compareTo: 1
Varchar.compareTo: 2
Compare(Long, Long): 1
Compare(Varchar, Varchar): 1

正如预期的那样, val() 比较返回错误的答案,因为该函数将大数隐式转换为近似类型。一旦转换,这些近似值被认为是相等的。

所有其他比较表明值不相等。虽然这些示例使用不同的函数,但它们都有一个共同点:当值相等时,它们都返回 0。其他任何内容都表明值不同。由于零 (0) 在 CF 中被视为 false,因此请确保您使用正确的表达式来测试相等性和差异性。
  • Long.compareTo() -(CF 中用于表示 BigInt 的数据类型)如果此 Long 等于参数 Long,则值为 0;如果此 Long 在数值上小于参数 Long,则为小于 0 的值;如果此 Long 在数值上大于参数 Long(有符号比较),则该值大于 0。”
  • String.compareTo() - 如果参数字符串等于这个字符串,则值为 0;如果此字符串按字典顺序小于字符串参数,则为小于 0 的值;如果此字符串按字典顺序大于字符串参数,则为大于 0 的值。
  • Compare(string1, string2) - "...对两个字符串进行区分大小写的比较。?返回 -1(小于)、0(等于)或 1(大于)
  • 关于ColdFusion 大数比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37192281/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com