获取数字的十进制变化

Getting the decimal variations on a number

所以,我在一个盒子里有一个数字,它可以是正数也可以是负数。根据该选择,我的算法会发生变化。

假设我在框中得到 207,它贯穿我的代码块,我想从数据库中获取 207 的所有可能的十进制变化,尽管我也可以查看其他的。所以我所做的是得到大于 207 但小于它上面一个数字的数字,它看起来像这样:

String DecimalValue = FilterUSD.Text.ToString().Trim();
Double Deci = Convert.ToDouble(DecimalValue);
Double init = Deci;
Double init2 = init + 1;

这从后端给我 207.50、207.99、207.13 等。

稍后的 SQL 声明需要这个,但这是重要的部分:

sbuilder.Append(" Amount_USD").Append(" >= ").Append("@init AND Amount_USD < @init2 ");

解析 sbuilder(字符串生成器)后,它看起来像这样:

Select * FROM Table WHERE Amount_USD >= @init AND Amount_USD < @init2 

这如我所料,我得到了给定数字的每个十进制数字,包括该数字。

我需要帮助的是负面变化。我不确定我做错了什么,但是代码的并置不起作用,当我试图通过 SQL 命令过滤它时,它 return 没有任何行。

完整代码如下:

String DecimalValue = FilterUSD.Text.ToString().Trim();
Double Deci = Convert.ToDouble(DecimalValue);
if(Deci < 0)
{
    //Negative
    Double init = Deci;
    Double init2 = init - 1;
    sbuilder.Append(" Amount_USD").Append(" <= ").Append("@init AND Amount_USD > @init2 ");
}
else
{
    //Positive, as above
}

SQL 负碱基代码的输出:

Select * FROM Table WHERE Amount_USD <= @init AND Amount_USD > @init2 

如果我们考虑:

if(Deci < 0)
{
    //Negative
    Double init = Deci;
    Double init2 = init - 1;
    sbuilder.Append(" Amount_USD").Append(" <= ").Append("@init AND Amount_USD > @init2 ");
}

此处 initinit2 的值是 不相关的 - 它们没有在任何地方使用,它们肯定不是在中使用的值参数。相反,找到添加参数的位置,并查看要添加的值那里。我希望您使用的是“+1”版本,这将提供不可能的范围测试。

这里的一个好方法是在if测试外部声明变量,在内部填充它们,然后之后使用这些值;例如:

double init, init2;
if(Deci < 0) {
    init = Deci;
    init2 = init - 1;
    sqlBuilder.Append(" Amount_USD <= @init AND Amount_USD > @init2 ");
} else {
    init = Deci;
    init2 = init + 1;
    sqlBuilder.Append(" Amount_USD >= @init AND Amount_USD < @init2 ");
}
cmd.Parameters.AddWithValue("@init", init);
cmd.Parameters.AddWithValue("@init2", init2);

这将强制您为两个代码路径中的局部变量(initinit2)分配一个有意义的值。

旁注:您可能需要 decimal 而不是 double;钱通常不是浮点数。