Lee*_*ish 4 precision coldfusion bigint
ColdFusion认为10090000000557765= 10090000000557763.
我明白了,但我需要知道ColdFusion知道它们不一样的最佳方法.我读了一下这个Compare()方法但是也返回了true.我把它们作为字符串输出并且也返回true.
我想写一个自定义函数将字符串分成两部分,分别比较每个部分然后返回true/false但这看起来很愚蠢.
我尝试过以下几点:
Val(a) EQ Val(b)
ToString(a) EQ ToString(b)
a.compareTo(b)
Run Code Online (Sandbox Code Playgroud)
为了澄清.我正在使用一个我无法控制的数据库使用bigint.我很早就知道Javascript无法处理这些因此我在模型中将所有bigint字段转换为varchar.然而,现在CF有问题比较字符串,我似乎不能将它们转换回数字.
我刚刚做过的例子:
<cfif '10090000000557765' EQ '10090000000557763'>
True
<cfelse>
False
</cfif>
Run Code Online (Sandbox Code Playgroud)
在http://cflive.net/上,它返回true.看我的笔记.在数据库中,他们是bigint.我不得不将它们作为VarChar投射出来,因为Javascript无法处理bigint但是它确实很好.
Lei*_*igh 10
答案很简单: 这样才不会忽视像明显,Java方法Long.compareTo()返回-1,0或1.确保使用正确的表达式来测试相等性.结果将是0值相等的时候.(零(0)评估为falseCF).
更长的答案:
如何存储,检索和特定评估值在这里是非常相关的.你提到的所有方法在CF11下都适合我(除了val明显的原因).这表明您的代码或环境有所不同.
例如,使用CF11和SQL Server:
CREATE TABLE test
(
bigIntValue1 BIGINT
, bigIntValue2 BIGINT
, varcharValue1 VARCHAR(50)
, varcharValue2 VARCHAR(50)
)
Run Code Online (Sandbox Code Playgroud)
以下测试代码:
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));
Run Code Online (Sandbox Code Playgroud)
产生以下结果:
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
Run Code Online (Sandbox Code Playgroud)
正如所料,val()比较返回错误的答案,因为该函数隐式地将大数转换为近似类型.转换后,这些近似值被认为是相等的.
所有其他比较表明值不相等.虽然示例使用不同的函数,但它们都有一个共同点:它们都0在值被认为相等时返回.其他任何表示值都不同.由于零(0)被视为falseCF,因此请确保使用正确的表达式来测试相等性和差异.
String.compareTo() - 如果参数字符串等于此字符串,则值为0; 如果此字符串按字典顺序小于字符串参数,则小于0的值; 如果此字符串按字典顺序大于字符串参数,则值大于0.
比较(string1,string2) - "...执行两个字符串的区分大小写的比较.?返回-1(小于),0(等于)或1(大于)
| 归档时间: |
|
| 查看次数: |
631 次 |
| 最近记录: |