มีวิธีใดบ้างที่ฉันสามารถระบุสตริงรูปแบบตัวเลขมาตรฐานหรือแบบกำหนดเองเพื่อส่งสัญญาณได้เสมอไม่ว่าจะเป็น + ve หรือ -ve (แม้ว่าสิ่งที่ควรทำสำหรับศูนย์ฉันไม่แน่ใจ!)
มีวิธีใดบ้างที่ฉันสามารถระบุสตริงรูปแบบตัวเลขมาตรฐานหรือแบบกำหนดเองเพื่อส่งสัญญาณได้เสมอไม่ว่าจะเป็น + ve หรือ -ve (แม้ว่าสิ่งที่ควรทำสำหรับศูนย์ฉันไม่แน่ใจ!)
คำตอบ:
ใช่คุณสามารถ. มีการจัดรูปแบบตามเงื่อนไข ดูการจัดรูปแบบตามเงื่อนไขใน MSDN
เช่น:
string MyString = number.ToString("+0;-#");
โดยที่แต่ละส่วนคั่นด้วยเครื่องหมายอัฒภาคแสดงถึงจำนวนบวกและลบ
หรือ:
string MyString = number.ToString("+#;-#;0");
หากคุณไม่ต้องการให้ศูนย์มีเครื่องหมายบวก
+#;-#
สำหรับค่า 0 ฉันได้รับเพียงแค่ "+" ไม่มีจริง 0. สำหรับฉันฉันต้องการ 0 ถึงปรากฏเป็น "0" +#;-#;+0
เพื่อให้งานนี้:
''
จะทำสิ่งที่ยอดเยี่ยม! ดูที่นี่: Changes.ToString("'('#' ▲)';'('#' ▼)';''")
! มันช่วยฉันประหยัดเวลาได้มากและมีข้อความหลายร้อยif
ข้อความ! :)
+0;-#
แทน+#;-#;+0
คำตอบนี้ทำให้ฉันเข้าใจผิดจริงๆ
ระวังเมื่อใช้การจัดรูปแบบตามเงื่อนไขค่าลบจะไม่ได้รับสัญญาณโดยอัตโนมัติ คุณต้องทำ
string MyString = number.ToString("+#;-#;0");
+0;-#
ให้คุณเห็นผลลัพธ์เดียวกันกับโค้ดที่สะอาดกว่า
คุณยังสามารถใช้สตริงรูปแบบใน 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
มากกว่า+#;-#
นี้ทำให้ชัดเจนว่า 0 จะจัดรูปแบบเป็น +0
ตรงกันข้ามกับคำตอบอื่น ๆ ดูเหมือนว่าหากคุณต้องการรับ +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 )
โปรดทราบว่าตัวระบุนี้จะไม่แสดงเลขศูนย์ที่ไม่ใช่เลขนัยสำคัญแม้ว่าศูนย์จะเป็นตัวเลขหลักเดียวในสตริง มันจะแสดงเป็นศูนย์เฉพาะในกรณีที่มันเป็นตัวเลขที่สำคัญในจำนวนที่จะแสดง
นอกจากนี้โปรดทราบว่าหากคุณต้องการความแม่นยำทศนิยมใด ๆ คุณต้องระบุเช่น:
String.Format("{0:+0.##;-#.##}", 0)); // output: +0
หรือถ้าคุณไม่ต้องการแสดงค่าศูนย์เช่นนั้น:
String.Format("{0:+0.00;-#.00}", 0)); // output: +0.00
สำหรับนิพจน์ตัวเลขทุกประเภท:
+###,###,###,###,###,###,###,###,###,##0.###,###,###,###,###,###,###,###,###,###;-###,###,###,###,###,###,###,###,###,##0.###,###,###,###,###,###,###,###,###,###;0
ใช้สามส่วนสำหรับสามกรณี: บวก; ลบ; ศูนย์
ด้านอื่น ๆ ของตัวอย่าง:
ศูนย์ไม่ได้ลงชื่อ คุณสามารถให้มันแสดงเป็นอะไรก็ได้เช่น "ศูนย์"
ค่าสัมบูรณ์น้อยกว่าหนึ่งมี 0 นำหน้าก่อนจุดทศนิยม ปรับเพื่อลิ้มรส
จำนวนหลักสำหรับค่าทศนิยมที่ใหญ่ที่สุดและเล็กที่สุด ปรับเพื่อลิ้มรส
อักขระตำแหน่งทศนิยมเป็นแบบเจาะจงวัฒนธรรม .NET ทดแทน
ตัวแยกการจัดกลุ่มเป็นทางเลือก ตัวละครเป็นวัฒนธรรมเฉพาะ .NET ทดแทน (ตำแหน่งนั้นเป็นแบบเฉพาะวัฒนธรรม แต่ถูกควบคุมโดยสตริงรูปแบบของคุณเท่านั้น) นอกจากนี้คุณยังใช้อักขระอื่นยกเว้นอักขระพิเศษสำหรับรูปแบบ (ซึ่งรวมถึง. # 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://stackoverflow.com/users/40256/gcores