【问题标题】:How to round a number to 2nd decimal from a SQL query returned to textbox如何将返回到文本框的 SQL 查询中的数字舍入到小数点后第二位
【发布时间】:2017-01-10 15:48:08
【问题描述】:

我有 3 个文本框接收来自 3 个 SQL 查询的 int 值,这些查询已经使用了ROUND() 函数。但是文本框中的结果返回 4 个小数点。即我需要值 xxxxx.xx,但 SQL 查询却返回 xxxx.xxxx

这是我的代码

private void totalRef_btn_Click(object sender, EventArgs e)
{
    SqlConnection conn = new SqlConnection("Data source=10.0.0.3,1434;Initial Catalog=client_orders_test;**Logins omitted**");

    SumTotalquery = "Select ROUND(SUM(value),2) from costings_cur";
    SumExVatquery = "Select ROUND(SUM(value-(value*14/100)),2) from costings_cur";
    SumVatquery = "Select ROUND(SUM(value*14/100),2) from costings_cur";

    SqlCommand totalQry = new SqlCommand(SumTotalquery, conn);
    SqlCommand exVatQry = new SqlCommand(SumExVatquery, conn);
    SqlCommand vatQry = new SqlCommand(SumVatquery, conn);

    conn.Open();
    SqlDataReader DR1 = totalQry.ExecuteReader();

    if (DR1.Read())
    {
        total_txtbox.Text = DR1.GetValue(0).ToString();
    }

    conn.Close();

    conn.Open();

    SqlDataReader DR2 = exVatQry.ExecuteReader();

    if (DR2.Read())
    {
        exvat_txtbox.Text = DR2.GetValue(0).ToString();
    }

    conn.Close();

    conn.Open();

    SqlDataReader DR3 = vatQry.ExecuteReader();

    if (DR3.Read())
    {
        vat_txtbox.Text = DR3.GetValue(0).ToString();
    }

    conn.Close();
}

我什至尝试过使用这个:

exvat_txtbox.Text = DR2.GetValue(0).ToString().Trim();

提前致谢

【问题讨论】:

  • DR1.GetValue(0).ToString("#.##");?
  • stackoverflow.com/questions/10380197/… 的可能重复项——但你为什么要启动 3 个连接——你可以在一个连接/查询中完成所有这些操作,然后只返回 3 列。
  • 您应该能够使用像DR1.GetValue(0).ToString("F") 这样的格式说明符。有关详细说明和其他选项,请参阅https://msdn.microsoft.com/en-us/library/dwhawy9k(v=vs.110).aspx
  • @BryanWoodford 谢谢,但在这种情况下占位符不起作用。尝试使用 ToString("0.00");也没有运气..
  • @JiggsJedi 该问题与 sql 中的 sql 查询有关,而不是在远程查询数据库时。如果我在 SSMS 中使用我的初始查询,我会得到想要的结果。但不是来自我的申请。问题在于 C# 将结果返回到文本框。

标签: c# sql sql-server winforms visual-studio


【解决方案1】:

使用Decimal(18,2) 得到正确的结果

SELECT CAST(ROUND(SUM(value),2) AS DECIMAL(18,2)) FROM costings_cur

其他 SELECT 语句的类似方式。

注意:Round函数只是对指定长度的数字进行四舍五入,它不负责获取特定格式的数据。

【讨论】:

  • 感谢您的帮助..您的回答完美:)
【解决方案2】:
  1. 使用数字格式字符串,例如ToString("0.##")

  2. 使用搜索来避免重复的问题... ;)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多