ฉันต้องการเพิ่มเครื่องหมายจุลภาคในหลักพันสำหรับตัวเลข
String.Format()
?
ฉันต้องการเพิ่มเครื่องหมายจุลภาคในหลักพันสำหรับตัวเลข
String.Format()
?
คำตอบ:
String.Format("{0:n}", 1234); // Output: 1,234.00
String.Format("{0:n0}", 9876); // No digits after the decimal point. Output: 9,876
string.Format("{0:n0}", Double.Parse(yourValue));
ฉันพบสิ่งนี้เป็นวิธีที่ง่ายที่สุด:
myInteger.ToString("N0")
int number = 1000000000;
string whatYouWant = number.ToString("#,##0");
//You get: 1,000,000,000
,
.
.
). NET จะแทนที่เครื่องหมายจุลภาคด้วยตัวคั่นนั้นโดยอัตโนมัติ อีกครั้งฉันขอให้คุณอ่านลิงค์โพสต์โดย Roger ถ้าคุณยังไม่เข้าใจว่าทำไมถึงเป็นเช่นนั้น
หากคุณต้องการวัฒนธรรมที่เฉพาะเจาะจงคุณอาจต้องการลองนี้:
(19950000.0).ToString("N",new CultureInfo("en-US"))
= 19,950,000.00
(19950000.0).ToString("N",new CultureInfo("is-IS"))
= 19.950.000,00
หมายเหตุ: บางวัฒนธรรมใช้,
เพื่อหมายถึงทศนิยมแทนที่จะ.
ระวังให้ดี
รูปแบบมาตรฐานพร้อมเอาต์พุตที่เกี่ยวข้อง
Console.WriteLine("Standard Numeric Format Specifiers");
String s = String.Format("(C) Currency: . . . . . . . . {0:C}\n" +
"(D) Decimal:. . . . . . . . . {0:D}\n" +
"(E) Scientific: . . . . . . . {1:E}\n" +
"(F) Fixed point:. . . . . . . {1:F}\n" +
"(G) General:. . . . . . . . . {0:G}\n" +
" (default):. . . . . . . . {0} (default = 'G')\n" +
"(N) Number: . . . . . . . . . {0:N}\n" +
"(P) Percent:. . . . . . . . . {1:P}\n" +
"(R) Round-trip: . . . . . . . {1:R}\n" +
"(X) Hexadecimal:. . . . . . . {0:X}\n",
- 1234, -1234.565F);
Console.WriteLine(s);
ตัวอย่างเอาต์พุต (วัฒนธรรม en-us):
(C) Currency: . . . . . . . . ($1,234.00)
(D) Decimal:. . . . . . . . . -1234
(E) Scientific: . . . . . . . -1.234565E+003
(F) Fixed point:. . . . . . . -1234.57
(G) General:. . . . . . . . . -1234
(default):. . . . . . . . -1234 (default = 'G')
(N) Number: . . . . . . . . . -1,234.00
(P) Percent:. . . . . . . . . -123,456.50 %
(R) Round-trip: . . . . . . . -1234.565
(X) Hexadecimal:. . . . . . . FFFFFB2E
นี่คือรูปแบบที่ดีที่สุด ทำงานได้ในทุกกรณี:
String.Format( "{0:#,##0.##}", 0 ); // 0
String.Format( "{0:#,##0.##}", 0.5 ); // 0.5 - some of the formats above fail here.
String.Format( "{0:#,##0.##}", 12314 ); // 12,314
String.Format( "{0:#,##0.##}", 12314.23123 ); // 12,314.23
String.Format( "{0:#,##0.##}", 12314.2 ); // 12,314.2
String.Format( "{0:#,##0.##}", 1231412314.2 ); // 1,231,412,314.2
String.Format("{0:#,###,###.##}", MyNumber)
ที่จะให้คุณจุลภาคที่จุดที่เกี่ยวข้อง
คำตอบที่ได้รับการโหวตมากที่สุดนั้นยอดเยี่ยมและมีประโยชน์มาประมาณ 7 ปี ด้วยการแนะนำ C # 6.0 และการแก้ไขสตริงโดยเฉพาะมีผู้เข้าชมมากกว่าและปลอดภัยกว่า IMO วิธีทำสิ่งที่ถูกถามto add commas in thousands place for a number
:
var i = 5222000;
var s = $"{i:n} is the number"; // results to > 5,222,000.00 is the number
s = $"{i:n0} has no decimal"; // results to > 5,222,000 has no decimal
ตำแหน่งที่ตัวแปรi
ถูกแทนที่ด้วยตัวยึดตำแหน่ง (เช่น{0}
) ดังนั้นไม่จำเป็นต้องจำสิ่งที่วัตถุไปยังตำแหน่งใด การจัดรูปแบบ (เช่น:n
) ไม่เปลี่ยนแปลง สำหรับคุณสมบัติที่สมบูรณ์ของสิ่งใหม่คุณสามารถไปที่หน้านี้
ง่าย ๆ เพียงแค่นี้
float num = 23658; // for example
num = num.ToString("N0"); // Returns 23,658
ข้อมูลเพิ่มเติมอยู่ที่นี่
หากคุณต้องการบังคับตัวคั่น "," โดยไม่คำนึงถึงวัฒนธรรม (เช่นในการติดตามหรือข้อความบันทึก) รหัสต่อไปนี้จะทำงานและมีประโยชน์เพิ่มเติมในการบอกคนต่อไปที่สะดุดในสิ่งที่คุณกำลังทำ
int integerValue = 19400320;
string formatted = string.Format(CultureInfo.InvariantCulture, "{0:N0}", integerValue);
กำหนดรูปแบบเป็น "19,400,320"
ตัวอย่างต่อไปนี้แสดงค่าหลายค่าที่จัดรูปแบบโดยใช้สตริงรูปแบบกำหนดเองที่มีตัวยึดพื้นที่เป็นศูนย์
String.Format("{0:N1}", 29255.0);
หรือ
29255.0.ToString("N1")
ผลลัพธ์ "29,255.0"
String.Format("{0:N2}", 29255.0);
หรือ
29255.0.ToString("N2")
ผลลัพธ์ "29,255.00"
int num = 98765432;
Console.WriteLine(string.Format("{0:#,#}", num));
ง่ายกว่าโดยใช้การแก้ไขสตริงแทน String.Format
$"{12456:n0}"; // 12,456
$"{12456:n2}"; // 12,456.00
หรือใช้ yourVariable
double yourVariable = 12456.0;
$"{yourVariable:n0}";
$"{yourVariable:n2}";
ตัวอย่างเช่นString.Format("{0:0,0}", 1);
คืน 01 สำหรับฉันไม่ถูกต้อง
มันใช้งานได้สำหรับฉัน
19950000.ToString("#,#", CultureInfo.InvariantCulture));
ผลผลิต 19,950,000
โปรดทราบว่าค่าที่คุณกำลังจัดรูปแบบควรเป็นตัวเลข มันดูไม่เหมือนว่ามันจะใช้การแทนค่าสตริงของตัวเลขและรูปแบบคือเครื่องหมายจุลภาค
String.Format("0,###.###"); also works with decimal places
C # 7.1 (อาจจะเร็วกว่านี้หรือไม่) ทำให้สิ่งนี้เป็นเรื่องง่ายและดูดีอย่างที่ควรจะเป็นด้วยการแก้ไขสตริง:
var jackpot = 1000000;
var niceNumberString = $"Jackpot is {jackpot:n}";
var niceMoneyString = $"Jackpot is {jackpot:C}";
คุณสามารถใช้ฟังก์ชั่นเช่นนี้เพื่อจัดรูปแบบตัวเลขและเลือกที่จะผ่านในตำแหน่งทศนิยมที่ต้องการ หากไม่ได้ระบุตำแหน่งทศนิยมจะใช้ทศนิยมสองตำแหน่ง
public static string formatNumber(decimal valueIn=0, int decimalPlaces=2)
{
return string.Format("{0:n" + decimalPlaces.ToString() + "}", valueIn);
}
ฉันใช้ทศนิยม แต่คุณสามารถเปลี่ยนประเภทเป็นอื่น ๆ หรือใช้วัตถุที่ไม่ระบุชื่อ คุณสามารถเพิ่มการตรวจสอบข้อผิดพลาดสำหรับค่าทศนิยมที่เป็นลบ
วิธีที่ฉันไม่ต้องกังวลอีกต่อไปเกี่ยวกับวัฒนธรรมและปัญหาการจัดรูปแบบที่เป็นไปได้คือฉันจัดรูปแบบเป็นสกุลเงินและนำสัญลักษณ์สกุลเงินออกมาหลังจากนั้น
if (decimal.TryParse(tblCell, out result))
{
formattedValue = result.ToString("C").Substring(1);
}
fr-FR
) หรือใช้อักขระมากกว่าหนึ่งตัวเพื่อแสดงถึงสกุลเงิน (เช่นda-DK
) หรือไม่แยกพันโดยใช้เครื่องหมายจุลภาค (เช่นส่วนใหญ่ ของแผ่นดินใหญ่ยุโรป)
ด้านล่างเป็นทางออกที่ดีใน Java แม้ว่า!
NumberFormat fmt = NumberFormat.getCurrencyInstance();
System.out.println(fmt.format(n));
หรือสำหรับวิธีที่มีประสิทธิภาพยิ่งขึ้นคุณอาจต้องการรับสถานที่ของสถานที่เฉพาะจากนั้นใช้ดังต่อไปนี้:
int n=9999999;
Locale locale = new Locale("en", "US");
NumberFormat fmt = NumberFormat.getCurrencyInstance(locale);
System.out.println(fmt.format(n));
สถานที่ส่งออกของสหรัฐอเมริกา : $ 9,999,999.00
สถานที่เกิดเหตุเยอรมัน
Locale locale = new Locale("de", "DE");
ผลลัพธ์: 9.999.999,00 €
สถานที่เกิดเหตุของอินเดีย
Locale locale = new Locale("de", "DE");
ผลลัพธ์: Rs.9,999,999.00
เอสโตเนียสถานที่เอาท์พุท
Locale locale = new Locale("et", "EE");
ผลลัพธ์: 9 999 999 €
อย่างที่คุณเห็นในเอาต์พุตต่าง ๆ คุณไม่ต้องกังวลว่าตัวคั่นจะเป็นเครื่องหมายจุลภาคหรือจุดหรือเว้นวรรคคุณสามารถจัดรูปแบบตัวเลขตามมาตรฐาน i18n
locale
??
ถ้าคุณต้องการที่จะแสดงมันใน DataGridview คุณควรเปลี่ยนประเภทเพราะเริ่มต้นเป็นสตริงและเนื่องจากคุณเปลี่ยนเป็นทศนิยมมันจะถือว่าเป็นจำนวนที่มีจุดลอยตัว
Dim dt As DataTable = New DataTable
dt.Columns.Add("col1", GetType(Decimal))
dt.Rows.Add(1)
dt.Rows.Add(10)
dt.Rows.Add(2)
DataGridView1.DataSource = dt
String.Format("{0:#,##0}", 1234);
ใช้ได้กับไม่มีทศนิยม