소수점 둘째 자리에서 반올림하는 방법(페이지에 출력할 경우)

현재 .ToString()으로 소수점 값을 표시할 때는 소수점 이하 15자리까지 표시하는 것이 정확하며, 달러와 센트를 표현하는 데 사용하므로 소수점 이하 2자리까지만 출력하기를 원합니다.

이를 위해 .ToString()의 변형을 사용해야 하나요?

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

또는

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

이것은 오래된 질문, 하지만 나는 알고 깜짝 놀랐다 있다는 답변을 게시물로의 없는 듯했다.

  1. 39 (bankers 둥글리기 didn& 사용할 수 없다.

  2. 39, 소수점 값으로 didn& 유지할 수 없다.

이것이 내가 사용하게 된다.

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

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

해설 (4)
decimalVar.ToString("F");

이렇게 하면:

  • 2 라운드 오프하도록 소수점 eg. 23.456 = &gt. 23.46 있는지 확인합니다. 항상 소수점 두 예. 23 = &gt. 23.00, 12.5 = &gt. 12.50

통화 및 디스플레이하여 이상적임 금액을.

대한 설명서 ToString (&quot F";): # 포르마스트링 http://msdn.microsoft.com/en-us/library/dwhawy9k% 28v 110%29.aspx (덕분에 함께 존 슈나이더구요) = vs.

해설 (6)

표시용으로만 필요한 경우 string.Format을 사용하십시오.

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

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

'm'은 소수점 접미사입니다. 소수점 접미사에 대해 알아보세요:

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

해설 (2)

이 때, 소수 d = 12.345 표현식에서는 d.토스트링 (C&quot ";) 또는 스테링스포르마 (,}, {0 c &quot &quot, d) 단, 현재 수익률이 - $12.35 culture& # 39 의 설정 등 통화 기호를 사용할 수 있습니다.

참고로 [&quot C";] (http://msdn.microsoft.com/en-us/library/dwhawy9k% 28v = vs. 110%29.aspx # 스포르마스트링) 는 현행 자릿수를 있다. 넌 언제나 필요한 기본 'C' like '} {precisiontm 지정자와 오버라이드합니다 강제로 정밀도의 스테링스포르마 (,}, {0 c2 &quot &quot, 5.123d)'.

해설 (2)

물론 당신이 원한다면 포맷됩니다 쉼표 같은 3,456,789.12 소수점 (단, 통화 기호 없음).

decimalVar.ToString("n2");
해설 (1)

39 의 높은 가리키는 두 골을 there& 이미 답을 데키마라자로런드 (.) 하지만 조금 더 필요한 것 같아요 - 예기치 않은 중요한 속성 때문에 설명은 there& # 39, s, t # 39 있는 소수 isn& 명백하네.

39, & # 39 knows& 소수. 이 회사는 시용되는 소수점 위치를 기반으로 it came from.

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

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"

동일한 작업을 하고 있는 '더블' ('&quot 25";') 의 소수점 이니요를 부여하느뇨 위의 각.

필요할 때 소수점 약 95% s 2 로 소수점 있다 # 39 의 it& it& 가능성이 있기 때문에, 이 경우 과태료를 통화화 # 39 이것은 아마도 95% 의 시간:

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

Xaml = {c} '또는' 가격, 스테링포르마 바인딩하면 방금 사용

내가 어디서 실행했음 1 건) 로 보낼 때 필요한 것은 소수 소수로 amazon& # 39 의 xml webservice. 이 때문에 불만을 소수점 값 (원래 SQL Server 에서) 는 서비스 개시 ',' 로 전송되는 25.1200 거부됩니다 ('25.12' 가 걱정했던것 형식).

I do) 는 데 필요한 모든 데키마라자로런드 (.) '와' 소수점 두 이 문제를 해결하십시오.

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

그래서 '형식은' 소수 ',' 메리 페드발루 couldn& # 39 라운드 't just do it 및 유지하는 데 필요한 ToString (&quot N2";)' 과 이를 '소수'.

해설 (3)

다음은 링크파드 프로그램 표시하십시오 조금 다른 형식:

void Main()
{
    FormatDecimal(2345.94742M);
    FormatDecimal(43M);
    FormatDecimal(0M);
    FormatDecimal(0.007M);
}

public void FormatDecimal(decimal val)
{
    Console.WriteLine("ToString: {0}", val);
    Console.WriteLine("c: {0:c}", val);
    Console.WriteLine("0.00: {0:0.00}", val);
    Console.WriteLine("0.##: {0:0.##}", val);
    Console.WriteLine("===================");
}

결과가 나타납니다.

ToString: 2345.94742
c: $2,345.95
0.00: 2345.95
0.##: 2345.95
===================
ToString: 43
c: $43.00
0.00: 43.00
0.##: 43
===================
ToString: 0
c: $0.00
0.00: 0.00
0.##: 0
===================
ToString: 0.007
c: $0.01
0.00: 0.01
0.##: 0.01
===================
해설 (0)

매우 드물게 투석실에다가 로렌아줌마가 경우 빈 문자열을 값은 0 입니다.

decimal test = 5.00;
test.ToString("0.00");  //"5.00"
decimal? test2 = 5.05;
test2.ToString("0.00");  //"5.05"
decimal? test3 = 0;
test3.ToString("0.00");  //"0.00"

그 답을 찾을 수 있습니다 잘못된 계시한하나님께 낭비됩니다 people& (대부분) 이 최고 평점 10 분, s # 39 시간입니다.

해설 (1)

이 중 어느 한 정확히 내가 필요한 것으로 '0.005 및 강제로 2 라운드 d.p. &gt -; 0.01 '

이로 인해 2 d.퍼 单捞磐啊 precisiontm 2 로 d.퍼 있다. 우리는 d.퍼 하려면 적어도 2

다음 2 개 이상의 d.퍼 둥글리기 보장할 수 없다

Math.Round(exactResult * 1.00m, 2, MidpointRounding.AwayFromZero)

6.665m.ToString() -> "6.67"

6.6m.ToString() -> "6.60"
해설 (0)
    • 의 소수점 표현 방법을 설명하고 있는 수준의 오토메이티드 포맷 문자열을 가치, 작동하잖아.

그러나 실제로 변경할 경우, you need to write something precision 에 저장된 실제값 다음과 같습니다.

public static class PrecisionHelper
{
    public static decimal TwoDecimalPlaces(this decimal value)
    {
        // These first lines eliminate all digits past two places.
        var timesHundred = (int) (value * 100);
        var removeZeroes = timesHundred / 100m;

        // In this implementation, I don't want to alter the underlying
        // value.  As such, if it needs greater precision to stay unaltered,
        // I return it.
        if (removeZeroes != value)
            return value;

        // Addition and subtraction can reliably change precision.  
        // For two decimal values A and B, (A + B) will have at least as 
        // many digits past the decimal point as A or B.
        return removeZeroes + 0.01m - 0.01m;
    }
}

예를 들어, 단위 테스트:

[Test]
public void PrecisionExampleUnitTest()
{
    decimal a = 500m;
    decimal b = 99.99m;
    decimal c = 123.4m;
    decimal d = 10101.1000000m;
    decimal e = 908.7650m

    Assert.That(a.TwoDecimalPlaces().ToString(CultureInfo.InvariantCulture),
        Is.EqualTo("500.00"));

    Assert.That(b.TwoDecimalPlaces().ToString(CultureInfo.InvariantCulture),
        Is.EqualTo("99.99"));

    Assert.That(c.TwoDecimalPlaces().ToString(CultureInfo.InvariantCulture),
        Is.EqualTo("123.40"));

    Assert.That(d.TwoDecimalPlaces().ToString(CultureInfo.InvariantCulture),
        Is.EqualTo("10101.10"));

    // In this particular implementation, values that can't be expressed in
    // two decimal places are unaltered, so this remains as-is.
    Assert.That(e.TwoDecimalPlaces().ToString(CultureInfo.InvariantCulture),
        Is.EqualTo("908.7650"));
}
해설 (0)

이스터 맥그로바이제이션 숫자를 포맷하십시오 필요한 형식을 사용할 수 있습니다.

  • 더 example:*
system.globalization.cultureinfo ci = new system.globalization.cultureinfo("en-ca");

필요한 경우 '와' decimal d = 1.2300000 트림하려면 소수점 두 redhat. 그런 것이 이렇게 인쇄할 수 있는 'F2 는 문자열 (&quot, F2&quot, ci),' d.토스트링 포맷 중 2 로 소수점 및 ci 는 로켈을 또는 쿠르투라인포.

이 링크를 클릭하면 자세한 정보 확인 http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx

해설 (1)

[마이크 M. & # 39 의 오토메이티드] (https://stackoverflow.com/a/5724542) 는 위한 완벽한 날 '' t have a # 39, .NET, 하지만 .NET 핵심 doesn& 데키마라자로런드 당시 방법을 쓰기 시작했다.

Net 에서는 코어, 내가 사용해야 했습니다.

decimal roundedValue = Math.Round(rawNumber, 2, MidpointRounding.AwayFromZero);

해키 문자열로 변환한 등, 한 방법 입니다.

public string FormatTo2Dp(decimal myNumber)
{
    // Use schoolboy rounding, not bankers.
    myNumber = Math.Round(myNumber, 2, MidpointRounding.AwayFromZero);

    return string.Format("{0:0.00}", myNumber);
}
해설 (0)

https://msdn.microsoft.com/en-us/library/dwhawy9k% 110%29.aspx 28v = vs.

이 링크를 통해 문제를 처리할 수 있는 방법을 자세히 설명합니다 및 확인하시겠습니까 경우 더 많은 일을 할 수 있습니다. 단순하게 목적으로 그리웠댔지 해야 할 것은

double whateverYouWantToChange = whateverYouWantToChange.ToString("F2");

스케쳐내 통화화 대해 이 쉽게 할 수 있습니다 입력하여 C2&quot "; 대신 F2&quot ";

해설 (0)
Double Amount = 0;
string amount;
amount=string.Format("{0:F2}", Decimal.Parse(Amount.ToString()));
해설 (0)