获取数字的十进制变化
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 ");
}
此处 init
和 init2
的值是 不相关的 - 它们没有在任何地方使用,它们肯定不是在中使用的值参数。相反,找到添加参数的位置,并查看要添加的值那里。我希望您使用的是“+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);
这将强制您为两个代码路径中的局部变量(init
、init2
)分配一个有意义的值。
旁注:您可能需要 decimal
而不是 double
;钱通常不是浮点数。
所以,我在一个盒子里有一个数字,它可以是正数也可以是负数。根据该选择,我的算法会发生变化。
假设我在框中得到 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 ");
}
此处 init
和 init2
的值是 不相关的 - 它们没有在任何地方使用,它们肯定不是在中使用的值参数。相反,找到添加参数的位置,并查看要添加的值那里。我希望您使用的是“+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);
这将强制您为两个代码路径中的局部变量(init
、init2
)分配一个有意义的值。
旁注:您可能需要 decimal
而不是 double
;钱通常不是浮点数。