【发布时间】:2016-06-07 03:32:03
【问题描述】:
我需要做的是将字段四舍五入到小数点后两位,但不是以通常的方式。我有一个总是四舍五入到小数点后两位 (CIT_NBR) 的下拉菜单。但是,在数据库表中,它有时会四舍五入到小数点后 1 位。所以现在我正在尝试基于该字段创建一个 SELECT 语句,但我的前端将其存储为 2 个小数,而我的后端可以存储为 1 个或 2 个小数。别问,很复杂。 :o)
所以,我想在“aircode”中做的是:
SELECT * FROM VW_MOS_DPL_AccountValidation WHERE CUST_NUM = @CNum
AND Format(CIT_NBR, 2 decimals) = @CITNum
这样,它强制表格中的数据使用 2 位小数,因此可以与我的下拉菜单进行比较。
这是我的代码块:
using (SqlConnection con2 = new SqlConnection(str2))
{
using (SqlCommand cmd2 = new SqlCommand(@"SELECT * FROM VW_MOS_DPL_AccountValidation WHERE CUST_NUM = @CNum AND CIT_NBR = @CITNum", con2))
{
con2.Open();
cmd2.Parameters.AddWithValue("@CNum", TBAccountNum.Text);
string ddlCITVal2 = ddlCIT.SelectedValue;
cmd2.Parameters.AddWithValue("@CITNum", ddlCITVal2);
using (SqlDataReader DT2 = cmd2.ExecuteReader())
{
// If the SQL returns any records, process the info
if (DT2.HasRows)
{
while (DT2.Read())
{
.
.
.
etc
我该怎么做呢?
【问题讨论】:
-
SQL 有 Round() 函数吗?你试过那个..?我在您的 Select Statement 中的任何地方都没有看到它.. 做一个简单的谷歌搜索以了解如何使用
Round() inside of a Select Statement -
数据库中的字段是数字还是字符串?如果它是一个数字,你不必添加任何东西,对吧?
1 == 1.0000000 -
这是一个字符串。所以,在数据库中我得到“11.0”,而在前端它是“11.00”。当我尝试运行 SELECT 语句时,它没有将它们视为相等并且不返回任何记录。
-
也许您需要将数据库中的数据类型更改为 Decimal 8,2,或者使用字符串的十进制表示形式和/或格式化字符串。如果您对我来说听起来很简单知道 sql 那么您可以执行以下操作并将 varchar 转换为小数
SELECT SUM(Cast(CitNum as decimal(8,2))) as CitNum FROM table -
问题是,它不是一个真正的数字。这就像一个版本号。有时是 1.0,有时是 1.37。它可以有 1 位或 2 位小数。这不是真的版本号,但这是我能做出的最佳比较。我无法更改数据类型。
标签: c# sql sql-server code-behind