[C#] 소수점 값을 소수점 이하 2 자리로 반올림하는 방법 (페이지 출력)

현재 10 진수 값을 표시 할 때 .ToString() 15 자리를 좋아하는 것이 정확하며, 달러와 센트를 나타내는 데 사용하기 때문에 출력은 소수점 2 자리 만 원합니다.

.ToString()이 변형을 사용 합니까?



답변

decimalVar.ToString ("#.##"); // returns "" when decimalVar == 0

또는

decimalVar.ToString ("0.##"); // returns "0"  when decimalVar == 0


답변

나는 이것이 오래된 질문이라는 것을 알고 있지만 아무도 그 답을 올리지 않는 것 같았다.

  1. 은행 반올림을 사용하지 않았습니다
  2. 값을 10 진수로 유지하지 않았습니다.

이것이 내가 사용하는 것입니다 :

decimal.Round(yourValue, 2, MidpointRounding.AwayFromZero);

http://msdn.microsoft.com/en-us/library/9s0xa85y.aspx


답변

decimalVar.ToString("F");

이것은 :

  • 소수점 이하 두 자리로 반올림합니다 ( 예 : 23.45623.46
  • 소수점 이하 두 자리가 항상 있는지 확인하십시오 ( 예 : 2323.00; 12.512.50

통화 표시에 이상적입니다.

ToString ( “F”) 에 대한 문서를 확인하십시오 (Jon Schneider 덕분에).


답변

표시를 위해 이것을 필요로하는 경우 string을 사용하십시오.

String.Format("{0:0.00}", 123.4567m);      // "123.46"

http://www.csharp-examples.net/string-format-double/

“m”은 10 진수 접미사입니다. 소수 접미사 정보 :

http://msdn.microsoft.com/en-us/library/364x0z75.aspx


답변

주어진 10 진수 d = 12.345; d.ToString ( “C”) 또는 String.Format ( “{0 : C}”, d) 표현식 은 $ 12.35입니다. .-기호를 포함한 현재 문화권의 통화 설정이 사용됩니다.

참고 “C” 현재 문화권에서 숫자의 사용 번호. C{Precision specifier}like로 필요한 정밀도를 강제하기 위해 항상 기본값을 무시할 수 있습니다 String.Format("{0:C2}", 5.123d).


답변

3,456,789.12와 같이 소수점과 통화 기호가 아닌 쉼표로 형식을 지정하려면 …

decimalVar.ToString("n2");


답변

Decimal.Round (…)를 참조하는 두 개의 높은 점수 답변이 이미 있지만 조금 더 설명이 필요하다고 생각합니다 .Decimal의 예기치 않은 중요한 속성이 분명하지 않기 때문입니다.

십진수는 어디서 왔는지에 따라 소수 자릿수가 얼마나 많은지를 ‘알고’있습니다.

예를 들어 다음은 예상치 못한 결과 일 수 있습니다.

Decimal.Parse("25").ToString()          =>   "25"
Decimal.Parse("25.").ToString()         =>   "25"
Decimal.Parse("25.0").ToString()        =>   "25.0"
Decimal.Parse("25.0000").ToString()     =>   "25.0000"

25m.ToString()                          =>   "25"
25.000m.ToString()                      =>   "25.000"

동일한 작업을 수행하면 위의 각각에 Double소수점 이하 자릿수 ( "25") 가 표시되지 않습니다 .

소수점 이하 2 자리를 원할 때 약 95 % 확률이 있습니다. 통화 인 경우 통화 시간이 95 %에 해당 할 수 있습니다.

Decimal.Parse("25.0").ToString("c")     =>   "$25.00"

또는 XAML에서 그냥 사용하십시오. {Binding Price, StringFormat=c}

XML을 Amazon의 웹 서비스에 보낼 때 10 진수로 10 진수가 필요한 경우가 발생했습니다. 10 진수 값 (원래 SQL Server에서 온)이 전송되어 25.1200거부 되어 서비스가 불만을 제기했습니다 (25.12 있었습니다 (예상 형식).

내가해야 할 일은 Decimal.Round(...)문제를 해결하기 위해 소수점 이하 2 자리를 사용하는 것입니다.

 // This is an XML message - with generated code by XSD.exe
 StandardPrice = new OverrideCurrencyAmount()
 {
       TypedValue = Decimal.Round(product.StandardPrice, 2),
       currency = "USD"
 }

TypedValue유형이 Decimal있으므로 그냥 할 수 없었고 ToString("N2")반올림하고로 유지해야했습니다 decimal.