【问题标题】:Comparing numbers pulled from MySQL using If statement使用 If 语句比较从 MySQL 中提取的数字
【发布时间】:2022-01-13 09:19:37
【问题描述】:

从 MySQL 中提取 2 个十进制值并尝试使用非常简单的 if 语句:

if subtotal < minval then DO THIS else DO THIS

它总是认为小计较小,即使它可能不是。 IsNumeric 确认这两个值都是数字。如果我使用minval=19.99 而不是从数据库中提取它就可以了。

检索minval 的代码如下所示:

Set rscontrol = db.Execute("select * from websitecontrol ")
minval = FormatNumber(rscontrol("minordervalue"))

【问题讨论】:

  • 检查从数据库中提取的值的类型 (TypeName(minval))。您很可能正在将两个字符串或一个字符串与实际数字进行比较。在这里检查IsNumeric 并没有真正的帮助,因为它评估表达式是否可以评估为数字,对于仅包含数字的字符串也是如此。如需进一步帮助:显示您的代码。
  • 这两个值都在 MySQL 中存储为十进制 (19,2)。 typename 将小计显示为 double,我认为这对于数字是正确的,但 minval 显示为字符串,所以我想这是我的问题,你能告诉代码它是数字吗?

标签: mysql if-statement vbscript asp-classic


【解决方案1】:

FormatNumber 是一个用于格式化显示值的函数。它返回一个格式化的字符串。

>>> n = 1.25
>>> WScript.Echo TypeName(n)
Double
>>> WScript.Echo TypeName(FormatNumber(n))
String

永远不要使用格式化函数除非结果是为了显示。

改变

minval = FormatNumber(rscontrol("minordervalue"))

minval = rscontrol("minordervalue")

如果这仍然没有帮助,您可以使用 CDbl 函数将值强制为双精度值。

minval = CDbl(rscontrol("minordervalue"))

请注意,该函数需要小数点,因为它是在系统的区域设置中配置的。

【讨论】:

  • set rscontrol=db.execute("select * from websitecontrol") minval=formatnumber(rscontrol("minordervalue"))
  • @user3417410 查看更新的答案。另外,请在以后的问题中提供此类信息。这一次我冒昧地为你做这件事。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-21
  • 1970-01-01
  • 2016-07-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多