항상 부호를 표시하는 사용자 정의 숫자 형식 문자열


답변:


297

그래 넌 할수있어. 조건부 서식이 있습니다. MSDN의 조건부 서식 참조

예 :

string MyString = number.ToString("+0;-#");

세미콜론으로 구분 된 각 섹션이 양수와 음수를 나타내는 경우

또는:

string MyString = number.ToString("+#;-#;0");

0에 더하기 부호를 원하지 않으면


1
음수가 마이너스를 얻지 않는 버그가 수정되었습니다.
로마 Starkov

정말 감사합니다! 나는 C #에서 '+'-플래그의 printf와 같은 것이 무엇인지 알아 내기 위해 한 시간 동안 내 머리를 파열 시켰고 당신은 나에게 대답을주었습니다.
rbaleksandar

4
와 함께 +#;-#, 값 0의 경우 "0"을 얻습니다. 실제 0은 없습니다. 0은 "+0"으로 표시되기를 원합니다 +#;-#;+0.
오리온 엘렌 질

3
감사! 이것을 섞으면 ''큰 일을 할 것입니다! 이것 좀 봐 Changes.ToString("'('#' ▲)';'('#' ▼)';''")! 그것은 많은 시간과 수백 개의 if진술을 저에게 구했습니다 ! :)
Shahab

1
@ orionelenzil 나는 같은 문제가있었습니다. 당신은 또한 할 수있는 +0;-#대신 +#;-#;+0이 대답은 정말 나를 위해 오해의 소지가 있었다.
Kamil Szot

56

조건부 서식을 사용할 때 음수 값은 자동으로 부호를 얻지 않습니다. 당신은해야합니다

string MyString = number.ToString("+#;-#;0");

다른 사람들이 지적했듯이 +0;-#깨끗한 코드로 동일한 결과를 얻을 수 있습니다.
앤드류

32

string.Format ();에서 형식 문자열을 사용할 수도 있습니다. 형식 문자열은 색인과 콜론 ( ':')으로 구분됩니다.

var f = string.Format("{0}, Force sign {0:+#;-#;+0}, No sign for zero {0:+#;-#;0}", number);

숫자 {+1, -1, 0}의 경우 다음을 제공합니다.

1, 힘 부호 +1, 영점 부호 없음 +1
-1, 힘 부호 -1, 영점 부호 없음 -1
0, 힘 부호 +0, 부호 없음 0

string.Format동일한 결과를 얻는 대신 보간 문자열을 사용할 수도 있습니다.

var f = $"{number}, Force sign {number:+#;-#;+0}, No sign for zero {number:+#;-#;0}";

답의 마지막 줄에는 "기본 형식 0, 강제 부호 +, 0이없는 부호 없음"이 표시되어야합니다. 그것이 +#;-#0 의 형식에 대한 실제 결과이기 때문에
Kamil Szot

고마워, 카밀-나는 그것을 그리워했다. 이제 힘 부호 형식을 수정했습니다. + #;-#; + 0 (+ #;-# 대신)
Edward

1
더 간단한 형식으로 힘 부호 동작을 얻을 수 있습니다 +0;-#. :)
Andrew

앤드류, 사실,하지만 난 선호 +#;-#;+0이상 +#;-#이 0 0으로 포맷됩니다이 명확 것을 만들면서
에드워드

10

다른 답변과 달리 +1, -1, +0 (인수 1, -1, 0)을 얻으려면 다음 형식을 사용해야합니다.

String.Format("{0:+#;-#;+0}", 0));  // output: +0

또는

String.Format("{0:+0;-#}", 0));  // output: +0

그냥 사용하면 0에 +#;-#대해서만 표시됩니다 +(아닙니다 +0).

"#"사용자 지정 지정자 ( https://msdn.microsoft.com/en-us/library/0c899ak8.aspx )

이 지정자는 문자열에서 0이 유일한 숫자 인 경우에도 유효 숫자가 아닌 0을 표시하지 않습니다. 표시되는 숫자에서 유효 숫자 인 경우에만 0이 표시됩니다.

또한 십진 정밀도가 필요한 경우 다음과 같이 지정해야합니다.

String.Format("{0:+0.##;-#.##}", 0));  // output: +0

또는 항상 표시하지 않으려면 다음과 같이하십시오.

String.Format("{0:+0.00;-#.00}", 0));  // output: +0.00

1

모든 유형의 숫자 ​​표현식의 경우 :

+###,###,###,###,###,###,###,###,###,##0.###,###,###,###,###,###,###,###,###,###;-###,###,###,###,###,###,###,###,###,##0.###,###,###,###,###,###,###,###,###,###;0

세 가지 경우에 세 부분을 사용하십시오. 긍정적; 부정적; 제로

예제의 다른 측면들 :

  • 0은 부호가 없습니다. "zero"와 같은 것으로 표시 할 수 있습니다.

  • 1보다 작은 절대 값은 소수점 앞에 0을 갖습니다. 맛에 맞게 조정하십시오.

  • 자릿수는 최대 및 최소 절대 10 진수 값입니다. 맛에 맞게 조정하십시오.

  • 소수점 문자는 문화에 따라 다릅니다. .NET 대체품.

  • 그룹화 구분 기호는 선택 사항입니다. 캐릭터는 문화에 따라 다릅니다. .NET 대체품. 위치는 문화에 따라 다르지만 형식 문자열로만 제어됩니다. 또한 Format의 특수 문자 (.. # 0 포함)를 제외한 다른 문자를 사용합니다.


0

댓글을 달 수 없으므로 여기에 답하십시오 (너트 평판 시스템 ....)

number.ToString ( "+ 0;-#")을 사용하여 UTC 문자열 TimeFormat을 매우 잘 만들 수 있습니다

PowerShell 코드에 표시

"$([System.DateTime]::Now.ToString('HH:mm:ss.fff'))$($([System.TimeZoneInfo]::Local.GetUtcOffset([System.DateTime]::Now).TotalMinutes.ToString('+0;-#')))"

감사합니다 @gcores https : //.com/users/40256/gcores

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.