จัดรูปแบบทศนิยมสำหรับค่าเปอร์เซ็นต์หรือไม่


206

สิ่งที่ฉันต้องการคือสิ่งนี้:

String.Format("Value: {0:%%}.", 0.8526)

โดยที่ %% เป็นผู้ให้บริการรูปแบบนั้นหรืออะไรก็ตามที่ฉันกำลังมองหา ควรส่งผลให้: Value: %85.26..

โดยทั่วไปฉันต้องการมันสำหรับการผูก wpf แต่ก่อนอื่นมาแก้ปัญหาการจัดรูปแบบทั่วไป:

<TextBlock Text="{Binding Percent, StringFormat=%%}" />

คำตอบ:


422

ใช้รูปแบบของสตริงP สิ่งนี้จะแตกต่างกันไปตามวัฒนธรรม:

String.Format("Value: {0:P2}.", 0.8526) // formats as 85.26 % (varies by culture)

1
ดูที่นี่ความแตกต่างใหญ่เหมือนสหรัฐอเมริกาและฝรั่งเศสประเภท หากด้านบนแตกต่างกันไปตามวัฒนธรรมมีการPจัดรูปแบบที่ไม่ขึ้นกับวัฒนธรรมหรือไม่?
bonCodigo

2
@bonCodigo: หากคุณต้องการผลลัพธ์สำหรับวัฒนธรรมเฉพาะเจาะจงให้ระบุวัฒนธรรมอย่างชัดเจน
Michael Haren

11

หากคุณมีเหตุผลที่ดีในการตั้งสำรองการจัดรูปแบบวัฒนธรรมขึ้นและได้รับการควบคุมอย่างชัดเจนมากกว่าหรือไม่มีช่องว่างระหว่างราคาและ "%" และว่า "%" เป็นผู้นำหรือต่อท้ายคุณสามารถใช้ NumberFormatInfo ของPercentPositivePatternและคุณสมบัติ PercentNegativePattern

ตัวอย่างเช่นในการรับค่าทศนิยมด้วยการต่อท้าย "%" และไม่มีช่องว่างระหว่างค่าและ "%":

myValue.ToString("P2", new NumberFormatInfo { PercentPositivePattern = 1, PercentNegativePattern = 1 });

ตัวอย่างที่สมบูรณ์มากขึ้น:

using System.Globalization; 

...

decimal myValue = -0.123m;
NumberFormatInfo percentageFormat = new NumberFormatInfo { PercentPositivePattern = 1, PercentNegativePattern = 1 };
string formattedValue = myValue.ToString("P2", percentageFormat); // "-12.30%" (in en-us)

3

หากคุณต้องการใช้รูปแบบที่ช่วยให้คุณสามารถเก็บหมายเลขเหมือนรายการของคุณรูปแบบนี้ใช้งานได้สำหรับฉัน: "# \\%"



-8

ฉันได้พบคำตอบข้างต้นเพื่อเป็นทางออกที่ดีที่สุด แต่ฉันไม่ชอบพื้นที่ชั้นนำก่อนเครื่องหมายเปอร์เซ็นต์ ฉันได้เห็นวิธีแก้ปัญหาที่ค่อนข้างซับซ้อน แต่ฉันแค่ใช้คำสั่งแทนที่นอกเหนือจากคำตอบข้างต้นแทนที่จะใช้วิธีการปัดเศษแบบอื่น

String.Format("Value: {0:P2}.", 0.8526).Replace(" %","%") // formats as 85.26% (varies by culture)

และยังคงผิดถ้าคุณต้องการบังคับให้อินพุตนั้นมากคุณสามารถใส่ตัวเลขเป็นทศนิยมและเพิ่มเครื่องหมายเปอร์เซ็นต์เนื่องจากการแทนที่มีค่าใช้จ่ายสูงและในกรณีนี้ไม่มีประโยชน์มาก "String.Format (" ค่า: {0: F2} . ", 0.8526 * 100)"
rekiem87
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.