c# - 제한 - c++ 숫자앞에 0




문자열 형식을 사용하여 소수점 이하 2 자리 또는 단순 정수 표시 (10)

Kahia가 작성한 코드를 더 명확하게 작성하려면 (텍스트를 추가하고 싶을 때는 명확하지만 까다로워 짐) ...이 간단한 해결책을 시도하십시오.

if (Math.Round((decimal)user.CurrentPoints) == user.CurrentPoints)
     ViewBag.MyCurrentPoints = String.Format("Your current Points: {0:0}",user.CurrentPoints);
else
     ViewBag.MyCurrentPoints = String.Format("Your current Points: {0:0.0}",user.CurrentPoints);

Math.Round에 두 개의 십진 변수를 비교하게하려면 여분의 캐스트 (십진수)를 추가해야했습니다.

나는 가끔 100이나 100.99 또는 100.9가 될 수있는 가격 필드를 가지고있다. 내가 원한 것은 그 가격을 위해 십진수가 입력되었을 때만 소수점 2 자리에 가격을 표시하는 것이다. 예를 들면 100이면 그렇게해야한다. 100은 100.00이 아니며 가격이 100.2이면 100.22도 100.20과 비슷해야합니다. 나는 인터넷 검색을하고 몇 가지 예를 보았지만 정확히 원하는 것과 일치하지 않았다.

// just two decimal places
String.Format("{0:0.00}", 123.4567);      // "123.46"
String.Format("{0:0.00}", 123.4);         // "123.40"
String.Format("{0:0.00}", 123.0);         // "123.00"

String.Format ( "{0 : 0.00}", Convert.ToDecimal (totalPrice))


간단한 한 줄 코드 :

public static string DoFormat(double myNumber)
{
    return string.Format("{0:0.00}", myNumber).Replace(".00","");
}

다른 답변 중 아무 것도 작동하지 않으면 OnLoad 함수에서 컨트롤의 ContentProperty 를 바인딩했기 때문일 수 있습니다. 즉,이 OnLoad 는 작동하지 않습니다.

private void UserControl_Load(object sender, RoutedEventArgs e)
{
  Bind.SetBindingElement(labelName, String.Format("{0:0.00}", PropertyName), Label.ContentProperty) 
}

해결책은 간단합니다. xaml에 ContentStringFormat 속성이 있습니다. 따라서 레이블을 만들 때 다음을 수행하십시오.

//if you want the decimal places definite
<Label Content="0" Name="labelName" ContentStringFormat="0.00"/>

또는

//if you want the decimal places to be optional
<Label Content="0" Name="labelName" ContentStringFormat="0.##"/>

시험

double myPrice = 123.0;

String.Format(((Math.Round(myPrice) == myPrice) ? "{0:0}" : "{0:0.00}"), myPrice);

어쨌든 형식 지정자에 조건을 넣을지는 모르겠지만 직접 포맷터를 작성할 수 있습니다.

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
               // all of these don't work
            Console.WriteLine("{0:C}", 10);
            Console.WriteLine("{0:00.0}", 10);
            Console.WriteLine("{0:0}", 10);
            Console.WriteLine("{0:0.00}", 10);
            Console.WriteLine("{0:0}", 10.0);
            Console.WriteLine("{0:0}", 10.1);
            Console.WriteLine("{0:0.00}", 10.1);

          // works
            Console.WriteLine(String.Format(new MyFormatter(),"{0:custom}", 9));
            Console.WriteLine(String.Format(new MyFormatter(),"{0:custom}", 9.1));
            Console.ReadKey();
        }
    }

    class MyFormatter : IFormatProvider, ICustomFormatter
    {
        public string Format(string format, object arg, IFormatProvider formatProvider)
        {
            switch (format.ToUpper())
            {
                case "CUSTOM":
                    if (arg is short || arg is int || arg is long)
                        return arg.ToString();
                    if (arg is Single || arg is Double)
                        return String.Format("{0:0.00}",arg);
                    break;
                // Handle other
                default:
                    try
                    {
                        return HandleOtherFormats(format, arg);
                    }
                    catch (FormatException e)
                    {
                        throw new FormatException(String.Format("The format of '{0}' is invalid.", format), e);
                    }
            }
            return arg.ToString(); // only as a last resort
        }

        private string HandleOtherFormats(string format, object arg)
        {
            if (arg is IFormattable)
                return ((IFormattable)arg).ToString(format, CultureInfo.CurrentCulture);
            if (arg != null)
                return arg.ToString();
            return String.Empty;
        }

        public object GetFormat(Type formatType)
        {
            if (formatType == typeof(ICustomFormatter))
                return this;
            return null;
        }
    }
}

이 같은 것도 효과가 있습니다.

String.Format("{0:P}", decimal.Parse(Resellers.Fee)).Replace(".00", "")

이 작업을 수행 할 기본 제공 형식이 없습니다. 값이 정수인지 아닌지에 따라 다른 형식을 사용해야합니다. 또는 항상 소수점 이하 2 자리로 서식을 지정하고 그 뒤에 문자열을 조작하여 후행하는 ".00"을 제거하십시오.


이것은 나를 위해 일했습니다!

String amount= "123.0000";
String.Format("{0:0.##}", amount);      // "123.00"

이것은 일반적인 서식 부동 소수점 사용 사례입니다.

불행히도 내장 된 모든 한 문자 형식 문자열 (예 : F, G, N)은이 기능을 직접 수행하지 않습니다.
예를 들어, num.ToString("F2") 는 항상 123.40 과 같이 소수점 2 자리를 표시합니다.

당신은 0.## 을 사용해야 할 것 0.## 패턴은 약간 장황 해 보입니다.

완전한 코드 예제 :

double a = 123.4567;
double b = 123.40;
double c = 123.00;

string sa = a.ToString("0.##"); // 123.46
string sb = b.ToString("0.##"); // 123.4
string sc = c.ToString("0.##"); // 123






number-formatting