2014-09-12 5 views
1

저는 C#을 처음 접했고 누군가 아래 코드로 도움을 줄 수 있는지 궁금합니다. "--------- INSERT FOR STATEMENT HERE"에 삽입 할 IF 문을 찾는 데 문제가 있습니다. 나는 십진수 10 자리로 수치를 제한하기 위해 SQL Convert (Decimal (28,10))를 사용하고 있습니다. 기본적으로 C#을 사용하여 보고서 디자이너에서 0을 제거하고 싶습니다.반올림하지 않고 소수점 서식 지정

선호하는 포맷 : 아래의 몇 가지 예 4.25 기본 형식 4.2500000000 대 : 0.00

추가 제로를 가진 아무 소용 0.0000000000 대. 현재 미결제 약정 금액 : 22,000,000.00

가설 예 :

22,000,000.12344567890 (사용 가능한 최대 10 소수)

나는 아래의 코드와 제로의를 제거 할 수 있었다; 그러나 나는 모든 수치에 대해 2 개의 제로에 국한되어있다. 따라서 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; 
} 
} 
+2

제목을 편집했습니다. "[제목에"태그 "가 포함되어 있어야합니까?] (http://meta.stackexchange.com/questions/19190/)"합의가 "아니오, 그렇지 않아야합니다"로 표시되어야합니다. –

+0

당신은'.TrimEnd ('0');' – ja72

답변

0

당신의 도움을 주셔서 감사합니다. 나는 당신의 제안을 수정하고 커크를 추가 논리를 추가 할 수 있었다. 다른 변수 (d2)를 추가하고 103.123456과 같은 값에 소수점 이하 2 자리를 허용하는 if 문을 하나 더 삽입했습니다. 아래를 참조하십시오 :

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; 
} 
} 
1

내가 이해하고 있는지 확인하기 위해 후행 0을 소수점 이하 2 자리 이상으로 제거하고 10 자리 소수점을 사용할 수도 있습니다.

그렇다면 매우 가깝고 간단한 문자열 형식을 사용하여 몇 가지 사항을 조정할 수 있습니다.

d = Convert.ToDouble(s); 
tb1 = (DataDynamics.ActiveReports.TextBox) rpt.Sections["Detail1"].Controls["txtValue1"]; 
tb1.Text = d.ToString("#,##0.00########"); 

여기 형식 #,##0.00######## 2 소수점 (a 0 의해 표시)되고, 나머지 8 (a # 의해 표시) 선택 사항을 필요로한다.

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 
+0

을 시도해 볼 수 있습니다. 명확히하기 위해서 - 저는 제로가없는 숫자 값으로 소수점 이하 10 자리를 갖고 싶습니다. 예를 들어 103.1234567891 또는 103.23453 (반올림하지 않음)을 표시하는 데 관심이 있지만 103.23456890 또는 103.23400은 표시하지 않습니다. 또한 소수점 뒤에 0 만 있으면 소수점 두 자리 만 표시하려고합니다. 예를 들어 103.000000000 대신 103.00을 보여주고 싶습니다. 게시 한 코드에서 성공적으로 수행했습니다. 그러나 숫자 값은 현재 소수점 두 자리로 제한됩니다. – user3746034

관련 문제