我对C#还不熟悉,并且想知道是否有人可以帮助解决以下代码问题。我无法找到一个IF语句插入" --------- INSERT IF STATEMENT HERE"。我正在利用SQL转换(十进制(28,10))将数值限制为10个小数点。基本上,我想通过利用C#删除报表设计器中的零。以下几个例子:
首选格式:4.25 vs 4.2500000000 首选格式:0.00 vs 0.0000000000
没有额外的零点。 目前的名义金额:22,000,000.00
假设的例子:
22,000,000.12344567890(可用时最多10位小数)
我可以使用以下代码删除零;但是,对于我所有的数值,我被限制为两个零。因此4.2500000000显示为4.25,但4.2511实际显示为4.25。有人可以帮忙吗?
public void Detail1_Format()
{ DataDynamics.ActiveReports.TextBox tb1;
String s;
Double d;
String ColName;
s = ((DataDynamics.ActiveReports.TextBox) rpt.Sections["Detail1"].Controls["txtValue1"]).Text;
ColName = ((DataDynamics.ActiveReports.TextBox) rpt.Sections["Detail1"].Controls["txtColName1"]).Text;
if((ColName == "Price") || (ColName == "Shares (Par or Notional)"))
{
if(Double.TryParse(s, out d) == true)
{
d = Convert.ToDouble(s);
tb1 = (DataDynamics.ActiveReports.TextBox) rpt.Sections["Detail1"].Controls["txtValue1"];
---------INSERT IF STATEMENT HERE
{tb1.Text = d.ToString("#,###.##########");}
---------else {
{tb1.Text = d.ToString("#,###.00");
}
((DataDynamics.ActiveReports.TextBox) rpt.Sections["Detail1"].Controls["txtValue1"]).Text = tb1.Text;}
}
else {
((DataDynamics.ActiveReports.TextBox) rpt.Sections["Detail1"].Controls["txtValue1"]).Text = ((DataDynamics.ActiveReports.TextBox) rpt.Sections["Detail1"].Controls["txtValue1"]).Text;
}
}
答案 0 :(得分:1)
为了确保我理解,你想要删除超过2位小数的尾随0,并且可能有10位小数。
如果是这样,你非常接近,你可以通过简单的字符串格式调整一些东西来做到这一点。
d = Convert.ToDouble(s);
tb1 = (DataDynamics.ActiveReports.TextBox) rpt.Sections["Detail1"].Controls["txtValue1"];
tb1.Text = d.ToString("#,##0.00########");
此处格式#,##0.00########
需要2位小数(由0
表示),其余8位是可选的(由#
表示)。
<强>实施例强>
Convert.ToDecimal("0.0000000000").ToString("#,##0.00########"); // 0.00
Convert.ToDecimal("4.2500000000").ToString("#,##0.00########"); // 4.25
Convert.ToDecimal("22,000,000.1234567890").ToString("#,##0.00########"); // 22,000,000.123456789
Convert.ToDecimal("22,000,000.1234567891").ToString("#,##0.00########"); // 22,000,000.1234567891
答案 1 :(得分:0)
感谢您的帮助。我能够修改你的建议,Kirk并添加额外的逻辑。我添加了另一个变量(d2)并插入了一个if语句,允许超过2个小数位,例如103.123456。请参阅以下内容:
public void Detail1_Format()
{ DataDynamics.ActiveReports.TextBox tb1;
String s;
Double d;
Decimal d2;
String ColName;
s = ((DataDynamics.ActiveReports.TextBox) rpt.Sections["Detail1"].Controls["txtValue1"]).Text;
ColName = ((DataDynamics.ActiveReports.TextBox) rpt.Sections["Detail1"].Controls["txtColName1"]).Text;
if((ColName == "Price" || ColName == "Original Face Value" || ColName == "Shares"))
{
if(Double.TryParse(s, out d) == true)
{
d = Convert.ToDouble(s);
tb1 = (DataDynamics.ActiveReports.TextBox) rpt.Sections["Detail1"].Controls["txtValue1"];
d2 = Convert.ToDecimal(s);
if((BitConverter.GetBytes(decimal.GetBits(d2)[3])[2]) > 2)
{tb1.Text = d.ToString("#,##0.00########");}
else
{tb1.Text = d.ToString("#,###.00");
}
((DataDynamics.ActiveReports.TextBox) rpt.Sections["Detail1"].Controls["txtValue1"]).Text = tb1.Text;}
}
else {
((DataDynamics.ActiveReports.TextBox) rpt.Sections["Detail1"].Controls["txtValue1"]).Text = ((DataDynamics.ActiveReports.TextBox) rpt.Sections["Detail1"].Controls["txtValue1"]).Text;
}
}