2013-06-06 2 views
1

나는 이것에 관해 많은 질문을하지만 나는 이것을 reggarding하는 것을 발견하지 못했다.예기치 않은 숫자 서식 출력

나는이 형식 다음과 같은 형식 번호로 시도 : value.ToString ("N", 새로운 CultureInfo를 ("FR-CA"))을. 값이 인 경우 float입니다. 형식은 적용되지만 그렇게 할 수는 없습니다. 이런 식으로 뭔가를해야만 포맷하는 방법이

123456  display as 123 456.00 
123456.789 display as 123 456.79 // rounded 
1234.5  display 1 234.50  //added a 0 padding 

있습니까 : 나는 exemples 여기 this article about formatting

에 대해 참조?

123456  display as 123 456  
123456.789 display as 123 456.789 
1234.5  display as 1 234.5 

다음은 코드가 나는 형식

private void dgvform_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
{ 
    float val; 
    if ((e.ColumnIndex == valeur.Index || e.ColumnIndex == valeurEN.Index) 
     && dgvform.Rows[e.RowIndex].Cells[type_d.Index].Value != null && dgvform.Rows[e.RowIndex].Cells[type_d.Index].Value.ToString() == "N" 
     && dgvform.Rows[e.RowIndex].Cells[valeur.Index].Value != null 
     && float.TryParse(dgvform.Rows[e.RowIndex].Cells[valeur.Index].Value.ToString(), out val)) 
    { 
     if (e.ColumnIndex == valeurEN.Index) 
      e.Value = val.ToString("N", new CultureInfo(_formatEN)); 
     else 
      e.Value = string.Format("{0:# ### ###.####}", val); 
    } 
} 

이가있는 DataGridView의 일부를 적용하려고했다입니다. 큰 if은이 셀에 서식을 적용해야하는지 결정하는 것입니다. valeur, valeurEN 모두 포매팅을 적용해야합니다. e.Value = val.ToString("N", new CultureInfo(_formatEN));은 서식을 적용하는 이전 방법입니다. _formatEN은 기본적으로 "en-US"입니다.

기본적으로 천 단위 구분 기호를 추가하고 올바른 소수 구분 기호를 사용하고 싶습니다. 내가 잘못하고있는 것에 대해 까다 롭지 않으십니까?

/편집 : 내가 당신이 custom numeric format string를 구축 할 필요가 가정 플로트

+0

'value'의 타입을 지정하십시오 (ToString()에 넣으려는 데이터 타입은 무엇입니까?)? – DonBoitnott

+0

@DonBoitnott 질문에 답변을 추가해 주셔서 감사합니다. –

+0

데이터 유형 정밀도 문제입니다. 아래 편집을 참조하십시오. – Douglas

답변

1

의 유형입니다. 후행 .###…이 (가 지정한 # 문자 수에 해당하는 최대까지) 요구되는만큼 소수 자릿수를 추가하는 동안

value.ToString("#,0.##########", new CultureInfo("fr-CA")) 

선행 #,0 부분은 천 단위 구분을 소개합니다. ,. 지정자는 그대로 사용되지 않고 현재 문화권에 따라 해석됩니다.

은 샘플 실행에 대해 http://ideone.com/QypZBP을 참조하십시오

double d = 12345.6789; 
Console.WriteLine(d.ToString("#,0.##########", new CultureInfo("fr-CA"))); 
// Output: "12 345,6789" 

편집을 : 당신이 명확히 한 이후 마지막 자리가 잘립니다지고 당신은 왜 float를 사용하고, 그 이유는 때문이다 해당 데이터 유형의 제한된 정밀도. MSDN 당 float의 정밀도는 7 자리 숫자입니다. 즉, 마지막 두 자리는 변수에 저장되지 않습니다. 전화 번호를 나타내려면 데이터 유형을 double으로 변경해야합니다.

+0

기대 한 바가 없습니다. '12345.6789'는'12 345.68' –

+0

으로 테스트되었습니다. 내 응용 프로그램 내에서 링크를 사용하면됩니다. 디버깅 할 때 잘 보이지만 여전히 12345.68로 datagridview에 서식이 지정됩니다. 내가 e.Value = val.ToString ("#, 0.####### ", 새로운 CultureInfo ("fr-CA "))''e.value '의 값은 실제로'12 345.6789'이지만 그리드에서는'12 345.68'입니다. 힘겨워? –