Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
String format numerik standar digunakan untuk memformat jenis numerik umum. String format numerik standar mengambil formulir [format specifier][precision specifier]
, di mana:
Penentu format adalah karakter alfabet tunggal yang menentukan jenis format angka, misalnya, mata uang atau persen. Setiap string format numerik yang berisi lebih dari satu karakter alfabet, termasuk spasi kosong, ditafsirkan sebagai string format numerik kustom. Untuk informasi selengkapnya, lihat String format numerik kustom.
Penentu presisi adalah bilangan bulat opsional yang memengaruhi jumlah digit dalam string yang dihasilkan. Dalam .NET 7 dan versi yang lebih baru, nilai presisi maksimum adalah 999.999.999. Dalam .NET 6, nilai presisi maksimum adalah Int32.MaxValue. Dalam versi .NET sebelumnya, presisi dapat berkisar dari 0 hingga 99. Penentu presisi mengontrol jumlah digit dalam representasi string angka. Ini tidak membulatkan angka itu sendiri. Untuk melakukan operasi pembulatan, gunakan Math.Ceilingmetode , Math.Floor, atau Math.Round .
Ketika penentu presisi mengontrol jumlah digit pecahan dalam string hasil, string hasil mencerminkan angka yang dibulatkan ke hasil yang dapat diwakili yang terdekat dengan hasil yang tak terbatas tepat. Jika ada dua hasil yang sama dekat dengan yang dapat diwakili:
- Pada .NET Framework dan .NET Core hingga .NET Core 2.0, runtime memilih hasil dengan digit yang paling tidak signifikan (yaitu, menggunakan MidpointRounding.AwayFromZero).
- Pada .NET Core 2.1 dan yang lebih baru, runtime memilih hasil dengan digit yang bahkan paling tidak signifikan (yaitu, menggunakan MidpointRounding.ToEven).
Nota
Penentu presisi menentukan jumlah digit dalam string hasil. Untuk mengaitkan string hasil dengan spasi di depan atau di belakang, gunakan fitur pemformatan komposit dan tentukan komponen lebar dalam item format.
String format numerik standar didukung oleh:
Beberapa kelebihan beban
ToString
metode dari semua jenis numerik. Misalnya, Anda dapat menyediakan string format numerik ke Int32.ToString(String) metode dan Int32.ToString(String, IFormatProvider) .Metode
TryFormat
semua jenis numerik, misalnya, Int32.TryFormat(Span<Char>, Int32, ReadOnlySpan<Char>, IFormatProvider) dan Single.TryFormat(Span<Char>, Int32, ReadOnlySpan<Char>, IFormatProvider).Fitur pemformatan komposit .NET, yang digunakan oleh beberapa
Write
metodeWriteLine
dan Console kelas dan StreamWriter , String.Format metode , dan StringBuilder.AppendFormat metode . Fitur format komposit memungkinkan Anda menyertakan representasi string dari beberapa item data dalam satu string, untuk menentukan lebar bidang, dan untuk meratakan angka dalam bidang. Untuk informasi selengkapnya, lihat Pemformatan Komposit.String terinterpolasi dalam C# dan Visual Basic, yang menyediakan sintaks yang disederhanakan jika dibandingkan dengan string format komposit.
Nasihat
Anda dapat mengunduh Utilitas Pemformatan, aplikasi .NET Core Windows Forms yang memungkinkan Anda menerapkan string format ke nilai numerik atau tanggal dan waktu dan menampilkan string hasil. Kode sumber tersedia untuk C# dan Visual Basic.
Penentu format standar
Tabel berikut menjelaskan penentu format numerik standar dan menampilkan sampel output yang dihasilkan oleh setiap penentu format. Lihat bagian Catatan untuk informasi tambahan tentang menggunakan string format numerik standar, dan bagian Contoh kode untuk ilustrasi komprehensif penggunaannya.
Hasil string yang diformat untuk budaya tertentu mungkin berbeda dari contoh berikut. Pengaturan sistem operasi, pengaturan pengguna, variabel lingkungan, dan versi .NET yang Anda gunakan semuanya dapat memengaruhi format. Misalnya, dimulai dengan .NET 5, .NET mencoba menyatukan format budaya di seluruh platform. Untuk informasi selengkapnya, lihat globalisasi .NET dan ICU.
Penentu format | Nama | Deskripsi | Contoh |
---|---|---|---|
"B" atau "b" | Biner | Hasil: String biner. Didukung oleh: Jenis integral saja (.NET 8+). Penentu presisi: Jumlah digit dalam string hasil. Informasi selengkapnya: Penentu Format Biner ("B"). |
42 ("B") -> 101010 255 ("B16") -> 0000000011111111 |
"C" atau "c" | Mata uang | Hasil: Nilai mata uang. Didukung oleh: Semua jenis numerik. Penentu presisi: Jumlah digit desimal. Penentu presisi default: Ditentukan oleh NumberFormatInfo.CurrencyDecimalDigits. Informasi selengkapnya: Penentu Format Mata Uang ("C"). |
123.456 ("C", en-US) -> \$123,46 123.456 ("C", fr-FR) -> 123,46 € 123.456 ("C", ja-JP) -> ¥ 123 -123.456 ("C3", en-US) -> (\$123,456) -123.456 ("C3", fr-FR) -> -123.456 € -123.456 ("C3", ja-JP) -> -¥123.456 |
"D" atau "d" | Desimal | Hasil: Digit bilangan bulat dengan tanda negatif opsional. Didukung oleh: Jenis integral saja. Penentu presisi: Jumlah digit minimum. Penentu presisi default: Jumlah minimum digit yang diperlukan. Informasi selengkapnya: Penentu Format Desimal("D"). |
1234 ("D") -> 1234 -1234 ("D6") -> -001234 |
"E" atau "e" | Eksponensial (ilmiah) | Hasil: Notasi eksponensial. Didukung oleh: Semua jenis numerik. Penentu presisi: Jumlah digit desimal. Penentu presisi default: 6. Informasi selengkapnya: Penentu Format Eksponensial ("E"). |
1052.0329112756 ("E", en-US) -> 1,052033E+003 1052.0329112756 ("e", fr-FR) -> 1.052033e+003 -1052.0329112756 ("e2", en-US) -> -1,05e+003 -1052.0329112756 ("E2", fr-FR) > - -1,05E+003 |
"F" atau "f" | Titik tetap | Hasil: Digit integral dan desimal dengan tanda negatif opsional. Didukung oleh: Semua jenis numerik. Penentu presisi: Jumlah digit desimal. Penentu presisi default: Ditentukan oleh NumberFormatInfo.NumberDecimalDigits. Informasi selengkapnya: Penentu Format Fixed-Point ("F"). |
1234.567 ("F", en-US) -> 1234.57 1234.567 ("F", de-DE) -> 1234.57 1234 ("F1", en-US) -> 1234.0 1234 ("F1", de-DE) -> 1234,0 -1234.56 ("F4", en-US) -> -1234.5600 -1234.56 ("F4", de-DE) -> -1234.5600 |
"G" atau "g" | Umum | Hasil: Semakin ringkas dari notasi tetap atau ilmiah. Didukung oleh: Semua jenis numerik. Penentu presisi: Jumlah digit signifikan. Penentu presisi default: Tergantung pada jenis numerik. Informasi selengkapnya: Penentu Format Umum ("G"). |
-123.456 ("G", en-US) > - -123.456 -123.456 ("G", sv-SE) -> -123.456 123.4546 ("G4", en-US) -> 123,5 123.4546 ("G4", sv-SE) -> 123,5 -1.234567890e-25 ("G", en-US) -> -1.23456789E-25 -1.234567890e-25 ("G", sv-SE) -> -1,23456789E-25 |
"N" atau "n" | Angka | Hasil: Digit integral dan desimal, pemisah grup, dan pemisah desimal dengan tanda negatif opsional. Didukung oleh: Semua jenis numerik. Penentu presisi: Jumlah tempat desimal yang diinginkan. Penentu presisi default: Ditentukan oleh NumberFormatInfo.NumberDecimalDigits. Informasi selengkapnya: Penentu Format Numerik ("N"). |
1234.567 ("N", en-US) -> 1.234,57 1234.567 ("N", ru-RU) -> 1 234.57 1234 ("N1", en-US) -> 1.234,0 1234 ("N1", ru-RU) -> 1 234,0 -1234.56 ("N3", en-US) -> -1.234,560 -1234.56 ("N3", ru-RU) -> -1 234.560 |
"P" atau "p" | Prosentase | Hasil: Angka dikalikan dengan 100 dan ditampilkan dengan simbol persen. Didukung oleh: Semua jenis numerik. Penentu presisi: Jumlah tempat desimal yang diinginkan. Penentu presisi default: Ditentukan oleh NumberFormatInfo.PercentDecimalDigits. Informasi selengkapnya: Penentu Format Persen ("P"). |
1 ("P", en-US) >- 100.00 % 1 ("P", fr-FR) -> 100.000 % -0.39678 ("P1", en-US) -> -39,7 % -0.39678 ("P1", fr-FR) -> -39,7 % |
"R" atau "r" | Round-trip | Hasil: String yang dapat melakukan perjalanan pulang pergi ke angka yang identik. Didukung oleh: Single, Double, dan BigInteger. Catatan: Disarankan untuk jenis saja BigInteger . Untuk Double jenis, gunakan "G17"; untuk Single jenis, gunakan "G9". Penentu presisi: Diabaikan. Informasi selengkapnya: Penentu Format Round-trip ("R"). |
123456789.12345678 ("R") -> 123456789.12345678 -1234567890.12345678 ("R") -> -1234567890.1234567 |
"X" atau "x" | Heksadesimal | Hasil: String heksadesimal. Didukung oleh: Jenis integral saja. Penentu presisi: Jumlah digit dalam string hasil. Informasi selengkapnya: Penentu Format Heksadesimal ("X"). |
255 ("X") -> FF -1 ("x") -> ff 255 ("x4") -> 00 dan seterusnya -1 ("X4") -> 00FF |
Karakter tunggal lainnya | Penentu tidak diketahui | Hasil: Melemparkan FormatException pada waktu proses. |
Menggunakan string format numerik standar
Nota
Contoh C# dalam artikel ini berjalan di runner dan playground kode sebaris Try.NET. Pilih tombol Jalankan untuk menjalankan contoh di jendela interaktif. Setelah menjalankan kode, Anda dapat memodifikasinya dan menjalankan kode yang dimodifikasi dengan memilih Jalankan lagi. Kode yang dimodifikasi berjalan di jendela interaktif atau, jika kompilasi gagal, jendela interaktif menampilkan semua pesan kesalahan pengkompilasi C#.
String format numerik standar dapat digunakan untuk menentukan pemformatan nilai numerik dengan salah satu cara berikut:
Ini dapat diteruskan ke
TryFormat
metode atau kelebihan bebanToString
metode yang memilikiformat
parameter. Contoh berikut memformat nilai numerik sebagai string mata uang dalam budaya saat ini (dalam hal ini, budaya en-US).decimal value = 123.456m; Console.WriteLine(value.ToString("C2")); // Displays $123.46
Dim value As Decimal = 123.456d Console.WriteLine(value.ToString("C2")) ' Displays $123.46
Ini dapat disediakan sebagai
formatString
argumen dalam item format yang digunakan dengan metode seperti String.Format, , Console.WriteLinedan StringBuilder.AppendFormat. Untuk informasi selengkapnya, lihat Pemformatan Komposit. Contoh berikut menggunakan item format untuk menyisipkan nilai mata uang dalam string.decimal value = 123.456m; Console.WriteLine($"Your account balance is {value:C2}."); // Displays "Your account balance is $123.46."
Dim value As Decimal = 123.456d Console.WriteLine("Your account balance is {0:C2}.", value) ' Displays "Your account balance is $123.46."
Secara opsional, Anda dapat menyediakan
alignment
argumen untuk menentukan lebar bidang numerik dan apakah nilainya rata kanan atau kiri. Contoh berikut menyelaraskan nilai mata uang dalam bidang 28 karakter, dan rata kanan nilai mata uang dalam bidang 14 karakter.decimal[] amounts = { 16305.32m, 18794.16m }; Console.WriteLine(" Beginning Balance Ending Balance"); Console.WriteLine(" {0,-28:C2}{1,14:C2}", amounts[0], amounts[1]); // Displays: // Beginning Balance Ending Balance // $16,305.32 $18,794.16
Dim amounts() As Decimal = {16305.32d, 18794.16d} Console.WriteLine(" Beginning Balance Ending Balance") Console.WriteLine(" {0,-28:C2}{1,14:C2}", amounts(0), amounts(1)) ' Displays: ' Beginning Balance Ending Balance ' $16,305.32 $18,794.16
Ini dapat disediakan sebagai
formatString
argumen dalam item ekspresi terinterpolasi dari string terinterpolasi. Untuk informasi selengkapnya, lihat artikel Interpolasi string di referensi C# atau artikel String terinterpolasi di referensi Visual Basic.
Bagian berikut memberikan informasi terperinci tentang setiap string format numerik standar.
Penentu format biner (B)
Penentu format biner ("B") mengonversi angka menjadi string digit biner. Format ini hanya didukung untuk jenis integral dan hanya pada .NET 8+.
Penentu presisi menunjukkan jumlah minimum digit yang diinginkan dalam string yang dihasilkan. Jika diperlukan, angka diisi dengan nol di sebelah kirinya untuk menghasilkan jumlah digit yang diberikan oleh penentu presisi.
String hasil tidak dipengaruhi oleh informasi pemformatan objek saat ini NumberFormatInfo .
Penentu format mata uang (C)
Penentu format "C" (atau mata uang) mengonversi angka menjadi string yang mewakili jumlah mata uang. Penentu presisi menunjukkan jumlah tempat desimal yang diinginkan dalam string hasil. Jika penentu presisi dihilangkan, presisi default ditentukan oleh NumberFormatInfo.CurrencyDecimalDigits properti .
Jika nilai yang akan diformat memiliki lebih dari jumlah tempat desimal yang ditentukan atau default, nilai pecahan dibulatkan dalam string hasil. Jika nilai di sebelah kanan jumlah tempat desimal yang ditentukan adalah 5 atau lebih besar, digit terakhir dalam string hasil dibulatkan jauh dari nol.
String hasil dipengaruhi oleh informasi pemformatan objek saat ini NumberFormatInfo . Tabel berikut mencantumkan NumberFormatInfo properti yang mengontrol pemformatan string yang dikembalikan.
Properti NumberFormatInfo | Deskripsi |
---|---|
CurrencyPositivePattern | Menentukan penempatan simbol mata uang untuk nilai positif. |
CurrencyNegativePattern | Menentukan penempatan simbol mata uang untuk nilai negatif, dan menentukan apakah tanda negatif diwakili oleh tanda kurung atau NegativeSign properti . |
NegativeSign | Menentukan tanda negatif yang digunakan jika CurrencyNegativePattern menunjukkan bahwa tanda kurung tidak digunakan. |
CurrencySymbol | Menentukan simbol mata uang. |
CurrencyDecimalDigits | Menentukan jumlah default digit desimal dalam nilai mata uang. Nilai ini dapat ditimpa dengan menggunakan penentu presisi. |
CurrencyDecimalSeparator | Menentukan string yang memisahkan digit integral dan desimal. |
CurrencyGroupSeparator | Menentukan string yang memisahkan grup angka integral. |
CurrencyGroupSizes | Menentukan jumlah digit bilangan bulat yang muncul dalam grup. |
Contoh berikut memformat Double nilai dengan penentu format mata uang:
double value = 12345.6789;
Console.WriteLine(value.ToString("C", CultureInfo.CurrentCulture));
Console.WriteLine(value.ToString("C3", CultureInfo.CurrentCulture));
Console.WriteLine(value.ToString("C3",
CultureInfo.CreateSpecificCulture("da-DK")));
// The example displays the following output on a system whose
// current culture is English (United States):
// $12,345.68
// $12,345.679
// 12.345,679 kr
Dim value As Double = 12345.6789
Console.WriteLine(value.ToString("C", CultureInfo.CurrentCulture))
Console.WriteLine(value.ToString("C3", CultureInfo.CurrentCulture))
Console.WriteLine(value.ToString("C3", _
CultureInfo.CreateSpecificCulture("da-DK")))
' The example displays the following output on a system whose
' current culture is English (United States):
' $12,345.68
' $12,345.679
' kr 12.345,679
Penentu format desimal (D)
Penentu format "D" (atau desimal) mengonversi angka menjadi string digit desimal (0-9), diawali dengan tanda minus jika angkanya negatif. Format ini hanya didukung untuk jenis integral.
Penentu presisi menunjukkan jumlah minimum digit yang diinginkan dalam string yang dihasilkan. Jika diperlukan, angka diisi dengan nol di sebelah kirinya untuk menghasilkan jumlah digit yang diberikan oleh penentu presisi. Jika tidak ada penentu presisi yang ditentukan, defaultnya adalah nilai minimum yang diperlukan untuk mewakili bilangan bulat tanpa nol di depannya.
String hasil dipengaruhi oleh informasi pemformatan objek saat ini NumberFormatInfo . Seperti yang ditunjukkan tabel berikut, satu properti memengaruhi pemformatan string hasil.
Properti NumberFormatInfo | Deskripsi |
---|---|
NegativeSign | Menentukan string yang menunjukkan bahwa angka negatif. |
Contoh berikut memformat Int32 nilai dengan penentu format desimal.
int value;
value = 12345;
Console.WriteLine(value.ToString("D"));
// Displays 12345
Console.WriteLine(value.ToString("D8"));
// Displays 00012345
value = -12345;
Console.WriteLine(value.ToString("D"));
// Displays -12345
Console.WriteLine(value.ToString("D8"));
// Displays -00012345
Dim value As Integer
value = 12345
Console.WriteLine(value.ToString("D"))
' Displays 12345
Console.WriteLine(value.ToString("D8"))
' Displays 00012345
value = -12345
Console.WriteLine(value.ToString("D"))
' Displays -12345
Console.WriteLine(value.ToString("D8"))
' Displays -00012345
Penentu format eksponensial (E)
Penentu format eksponensial ("E") mengonversi angka menjadi string formulir "-d.ddd... E+ddd" atau "-d.ddd... e+ddd", di mana setiap "d" menunjukkan digit (0-9). String dimulai dengan tanda minus jika angkanya negatif. Tepat satu digit selalu mendahului titik desimal.
Penentu presisi menunjukkan jumlah digit yang diinginkan setelah titik desimal. Jika penentu presisi dihilangkan, default enam digit setelah titik desimal digunakan.
Kasus penentu format menunjukkan apakah akan mengawali eksponen dengan "E" atau "e". Eksponen selalu terdiri dari tanda plus atau minus dan minimal tiga digit. Eksponen diisi dengan nol untuk memenuhi minimum ini, jika diperlukan.
String hasil dipengaruhi oleh informasi pemformatan objek saat ini NumberFormatInfo . Tabel berikut mencantumkan NumberFormatInfo properti yang mengontrol pemformatan string yang dikembalikan.
Properti NumberFormatInfo | Deskripsi |
---|---|
NegativeSign | Menentukan string yang menunjukkan bahwa angka negatif untuk koefisien dan eksponen. |
NumberDecimalSeparator | Menentukan string yang memisahkan digit integral dari digit desimal dalam koefisien. |
PositiveSign | Menentukan string yang menunjukkan bahwa eksponen positif. |
Contoh berikut memformat Double nilai dengan penentu format eksponensial:
double value = 12345.6789;
Console.WriteLine(value.ToString("E", CultureInfo.InvariantCulture));
// Displays 1.234568E+004
Console.WriteLine(value.ToString("E10", CultureInfo.InvariantCulture));
// Displays 1.2345678900E+004
Console.WriteLine(value.ToString("e4", CultureInfo.InvariantCulture));
// Displays 1.2346e+004
Console.WriteLine(value.ToString("E",
CultureInfo.CreateSpecificCulture("fr-FR")));
// Displays 1,234568E+004
Dim value As Double = 12345.6789
Console.WriteLine(value.ToString("E", CultureInfo.InvariantCulture))
' Displays 1.234568E+004
Console.WriteLine(value.ToString("E10", CultureInfo.InvariantCulture))
' Displays 1.2345678900E+004
Console.WriteLine(value.ToString("e4", CultureInfo.InvariantCulture))
' Displays 1.2346e+004
Console.WriteLine(value.ToString("E", _
CultureInfo.CreateSpecificCulture("fr-FR")))
' Displays 1,234568E+004
Penentu format titik tetap (F)
Penentu format titik tetap ("F") mengonversi angka menjadi string formulir "-ddd.ddd..." di mana setiap "d" menunjukkan digit (0-9). String dimulai dengan tanda minus jika angkanya negatif.
Penentu presisi menunjukkan jumlah tempat desimal yang diinginkan. Jika penentu presisi dihilangkan, properti saat ini NumberFormatInfo.NumberDecimalDigits menyediakan presisi numerik.
String hasil dipengaruhi oleh informasi pemformatan objek saat ini NumberFormatInfo . Tabel berikut mencantumkan properti NumberFormatInfo objek yang mengontrol pemformatan string hasil.
Properti NumberFormatInfo | Deskripsi |
---|---|
NegativeSign | Menentukan string yang menunjukkan bahwa angka negatif. |
NumberDecimalSeparator | Menentukan string yang memisahkan digit integral dari digit desimal. |
NumberDecimalDigits | Menentukan jumlah default digit desimal. Nilai ini dapat ditimpa dengan menggunakan penentu presisi. |
Contoh berikut memformat Double dan nilai Int32 dengan penentu format titik tetap:
int integerNumber;
integerNumber = 17843;
Console.WriteLine(integerNumber.ToString("F",
CultureInfo.InvariantCulture));
// Displays 17843.00
integerNumber = -29541;
Console.WriteLine(integerNumber.ToString("F3",
CultureInfo.InvariantCulture));
// Displays -29541.000
double doubleNumber;
doubleNumber = 18934.1879;
Console.WriteLine(doubleNumber.ToString("F", CultureInfo.InvariantCulture));
// Displays 18934.19
Console.WriteLine(doubleNumber.ToString("F0", CultureInfo.InvariantCulture));
// Displays 18934
doubleNumber = -1898300.1987;
Console.WriteLine(doubleNumber.ToString("F1", CultureInfo.InvariantCulture));
// Displays -1898300.2
Console.WriteLine(doubleNumber.ToString("F3",
CultureInfo.CreateSpecificCulture("es-ES")));
// Displays -1898300,199
Dim integerNumber As Integer
integerNumber = 17843
Console.WriteLine(integerNumber.ToString("F", CultureInfo.InvariantCulture))
' Displays 17843.00
integerNumber = -29541
Console.WriteLine(integerNumber.ToString("F3", CultureInfo.InvariantCulture))
' Displays -29541.000
Dim doubleNumber As Double
doubleNumber = 18934.1879
Console.WriteLine(doubleNumber.ToString("F", CultureInfo.InvariantCulture))
' Displays 18934.19
Console.WriteLine(doubleNumber.ToString("F0", CultureInfo.InvariantCulture))
' Displays 18934
doubleNumber = -1898300.1987
Console.WriteLine(doubleNumber.ToString("F1", CultureInfo.InvariantCulture))
' Displays -1898300.2
Console.WriteLine(doubleNumber.ToString("F3", _
CultureInfo.CreateSpecificCulture("es-ES")))
' Displays -1898300,199
Penentu format umum (G)
Penentu format umum ("G") mengonversi angka menjadi lebih ringkas dari notasi tetap atau ilmiah, tergantung pada jenis angka dan apakah penentu presisi ada. Penentu presisi menentukan jumlah maksimum digit signifikan yang dapat muncul dalam string hasil. Jika penentu presisi dihilangkan atau nol, jenis angka menentukan presisi default, seperti yang ditunjukkan dalam tabel berikut.
Jenis numerik | Presisi default |
---|---|
Byte atau SByte | 3 digit |
Int16 atau UInt16 | 5 digit |
Int32 atau UInt32 | 10 digit |
Int64 | 19 digit |
UInt64 | 20 digit |
BigInteger | Tidak terbatas (sama dengan "R") |
Half | Jumlah digit round-trippable terkecil untuk mewakili angka |
Single | Jumlah digit round-trippable terkecil untuk mewakili angka (dalam .NET Framework, G7 adalah default) |
Double | Jumlah digit round-trippable terkecil untuk mewakili angka (dalam .NET Framework, G15 adalah default) |
Decimal | Jumlah digit round-trippable terkecil untuk mewakili angka |
Notasi titik tetap digunakan jika eksponen yang akan dihasilkan dari mengekspresikan angka dalam notasi ilmiah lebih besar dari -5 dan kurang dari penentu presisi; jika tidak, notasi ilmiah digunakan. Hasilnya berisi titik desimal jika diperlukan, dan nol berikutnya setelah titik desimal dihilangkan. Jika penentu presisi ada dan jumlah digit signifikan dalam hasil melebihi presisi yang ditentukan, digit berikutnya berlebih akan dihapus dengan pembulatan.
Namun, jika angka adalah dan Decimal penentu presisi dihilangkan, notasi titik tetap selalu digunakan dan nol berikutnya dipertahankan.
Jika notasi ilmiah digunakan, eksponen dalam hasil diawali dengan "E" jika penentu format adalah "G", atau "e" jika penentu format adalah "g". Eksponen berisi minimal dua digit. Ini berbeda dari format untuk notasi ilmiah yang diproduksi oleh penentu format eksponensial, yang mencakup minimal tiga digit dalam eksponen.
Saat digunakan dengan Double nilai, penentu format "G17" memastikan bahwa nilai asli Double berhasil melakukan perjalanan pulang pergi. Ini karena Double adalah angka titik mengambang presisi ganda yang mematuhi IEEE 754-2008 (binary64
) yang memberikan hingga 17 digit presisi signifikan. Pada .NET Framework, kami merekomendasikan penggunaannya alih-alih penentu format "R", karena dalam beberapa kasus "R" gagal berhasil melakukan round-trip nilai titik floating presisi ganda.
Saat digunakan dengan Single nilai, penentu format "G9" memastikan bahwa nilai asli Single berhasil melakukan pulang-pergi. Ini karena Single adalah angka titik floating presisi tunggal yang mematuhi IEEE 754-2008 (binary32
) yang memberikan hingga sembilan digit presisi yang signifikan. Untuk alasan performa, kami merekomendasikan penggunaannya alih-alih penentu format "R".
String hasil dipengaruhi oleh informasi pemformatan objek saat ini NumberFormatInfo . Tabel berikut mencantumkan NumberFormatInfo properti yang mengontrol pemformatan string hasil.
Properti NumberFormatInfo | Deskripsi |
---|---|
NegativeSign | Menentukan string yang menunjukkan bahwa angka negatif. |
NumberDecimalSeparator | Menentukan string yang memisahkan digit integral dari digit desimal. |
PositiveSign | Menentukan string yang menunjukkan bahwa eksponen positif. |
Contoh berikut memformat nilai floating-point bermakna dengan penentu format umum:
double number;
number = 12345.6789;
Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture));
// Displays 12345.6789
Console.WriteLine(number.ToString("G",
CultureInfo.CreateSpecificCulture("fr-FR")));
// Displays 12345,6789
Console.WriteLine(number.ToString("G7", CultureInfo.InvariantCulture));
// Displays 12345.68
number = .0000023;
Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture));
// Displays 2.3E-06
Console.WriteLine(number.ToString("G",
CultureInfo.CreateSpecificCulture("fr-FR")));
// Displays 2,3E-06
number = .0023;
Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture));
// Displays 0.0023
number = 1234;
Console.WriteLine(number.ToString("G2", CultureInfo.InvariantCulture));
// Displays 1.2E+03
number = Math.PI;
Console.WriteLine(number.ToString("G5", CultureInfo.InvariantCulture));
// Displays 3.1416
Dim number As Double
number = 12345.6789
Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture))
' Displays 12345.6789
Console.WriteLine(number.ToString("G", _
CultureInfo.CreateSpecificCulture("fr-FR")))
' Displays 12345,6789
Console.WriteLine(number.ToString("G7", CultureInfo.InvariantCulture))
' Displays 12345.68
number = .0000023
Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture))
' Displays 2.3E-06
Console.WriteLine(number.ToString("G", _
CultureInfo.CreateSpecificCulture("fr-FR")))
' Displays 2,3E-06
number = .0023
Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture))
' Displays 0.0023
number = 1234
Console.WriteLine(number.ToString("G2", CultureInfo.InvariantCulture))
' Displays 1.2E+03
number = Math.Pi
Console.WriteLine(number.ToString("G5", CultureInfo.InvariantCulture))
' Displays 3.1416
Penentu format numerik (N)
Penentu format numerik ("N") mengonversi angka menjadi string formulir "-d,ddd,ddd.ddd...", di mana "-" menunjukkan simbol angka negatif jika diperlukan, "d" menunjukkan digit (0-9), "," menunjukkan pemisah grup, dan "." menunjukkan simbol titik desimal. Penentu presisi menunjukkan jumlah digit yang diinginkan setelah titik desimal. Jika penentu presisi dihilangkan, jumlah tempat desimal ditentukan oleh properti saat ini NumberFormatInfo.NumberDecimalDigits .
String hasil dipengaruhi oleh informasi pemformatan objek saat ini NumberFormatInfo . Tabel berikut mencantumkan NumberFormatInfo properti yang mengontrol pemformatan string hasil.
Properti NumberFormatInfo | Deskripsi |
---|---|
NegativeSign | Menentukan string yang menunjukkan bahwa angka negatif. |
NumberNegativePattern | Menentukan format nilai negatif, dan menentukan apakah tanda negatif diwakili oleh tanda kurung atau NegativeSign properti . |
NumberGroupSizes | Menentukan jumlah digit integral yang muncul di antara pemisah grup. |
NumberGroupSeparator | Menentukan string yang memisahkan grup angka integral. |
NumberDecimalSeparator | Menentukan string yang memisahkan digit integral dan desimal. |
NumberDecimalDigits | Menentukan jumlah default digit desimal. Nilai ini dapat ditimpa dengan menggunakan penentu presisi. |
Contoh berikut memformat nilai floating-point bermakna dengan penentu format angka:
double dblValue = -12445.6789;
Console.WriteLine(dblValue.ToString("N", CultureInfo.InvariantCulture));
// Displays -12,445.68
Console.WriteLine(dblValue.ToString("N1",
CultureInfo.CreateSpecificCulture("sv-SE")));
// Displays -12 445,7
int intValue = 123456789;
Console.WriteLine(intValue.ToString("N1", CultureInfo.InvariantCulture));
// Displays 123,456,789.0
Dim dblValue As Double = -12445.6789
Console.WriteLine(dblValue.ToString("N", CultureInfo.InvariantCulture))
' Displays -12,445.68
Console.WriteLine(dblValue.ToString("N1", _
CultureInfo.CreateSpecificCulture("sv-SE")))
' Displays -12 445,7
Dim intValue As Integer = 123456789
Console.WriteLine(intValue.ToString("N1", CultureInfo.InvariantCulture))
' Displays 123,456,789.0
Penentu format persen (P)
Penentu format persentase ("P") mengalikan angka dengan 100 dan mengonversinya menjadi string yang mewakili persentase. Penentu presisi menunjukkan jumlah tempat desimal yang diinginkan. Jika penentu presisi dihilangkan, presisi numerik default yang disediakan oleh properti saat ini PercentDecimalDigits digunakan.
Tabel berikut mencantumkan NumberFormatInfo properti yang mengontrol pemformatan string yang dikembalikan.
Properti NumberFormatInfo | Deskripsi |
---|---|
PercentPositivePattern | Menentukan penempatan simbol persen untuk nilai positif. |
PercentNegativePattern | Menentukan penempatan simbol persen dan simbol negatif untuk nilai negatif. |
NegativeSign | Menentukan string yang menunjukkan bahwa angka negatif. |
PercentSymbol | Menentukan simbol persen. |
PercentDecimalDigits | Menentukan jumlah default digit desimal dalam nilai persentase. Nilai ini dapat ditimpa dengan menggunakan penentu presisi. |
PercentDecimalSeparator | Menentukan string yang memisahkan digit integral dan desimal. |
PercentGroupSeparator | Menentukan string yang memisahkan grup angka integral. |
PercentGroupSizes | Menentukan jumlah digit bilangan bulat yang muncul dalam grup. |
Contoh berikut memformat nilai floating-point dengan penentu format persen:
double number = .2468013;
Console.WriteLine(number.ToString("P", CultureInfo.InvariantCulture));
// Displays 24.68 %
Console.WriteLine(number.ToString("P",
CultureInfo.CreateSpecificCulture("hr-HR")));
// Displays 24,68%
Console.WriteLine(number.ToString("P1", CultureInfo.InvariantCulture));
// Displays 24.7 %
Dim number As Double = .2468013
Console.WriteLine(number.ToString("P", CultureInfo.InvariantCulture))
' Displays 24.68 %
Console.WriteLine(number.ToString("P", _
CultureInfo.CreateSpecificCulture("hr-HR")))
' Displays 24,68%
Console.WriteLine(number.ToString("P1", CultureInfo.InvariantCulture))
' Displays 24.7 %
Penentu format pulang-pergi (R)
Penentu format round-trip ("R") mencoba memastikan bahwa nilai numerik yang dikonversi ke string diurai kembali ke nilai numerik yang sama. Format ini hanya didukung untuk Halfjenis , , SingleDouble, dan BigInteger .
Dalam .NET Framework dan dalam versi .NET Core yang lebih lama dari 3.0, penentu format "R" gagal untuk berhasil melakukan perjalanan pulang pergi Double dalam beberapa kasus. Untuk nilai Double dan Single , penentu format "R" menawarkan performa yang relatif buruk. Sebagai gantinya, kami sarankan Anda menggunakan penentu format "G17" untuk Double nilai dan penentu format "G9" agar berhasil melakukan perjalanan pulang pergi Single .
BigInteger Ketika nilai diformat menggunakan penentu ini, representasi stringnya berisi semua digit signifikan dalam BigInteger nilai.
Meskipun Anda dapat menyertakan penentu presisi, itu diabaikan. Perjalanan pulang pergi diberikan lebih diutamakan daripada presisi saat menggunakan penentu ini. String hasil dipengaruhi oleh informasi pemformatan objek saat ini NumberFormatInfo . Tabel berikut mencantumkan NumberFormatInfo properti yang mengontrol pemformatan string hasil.
Properti NumberFormatInfo | Deskripsi |
---|---|
NegativeSign | Menentukan string yang menunjukkan bahwa angka negatif. |
NumberDecimalSeparator | Menentukan string yang memisahkan digit integral dari digit desimal. |
PositiveSign | Menentukan string yang menunjukkan bahwa eksponen positif. |
Contoh berikut memformat BigInteger nilai dengan penentu format pulang pergi.
using System;
using System.Numerics;
public class Example
{
public static void Main()
{
var value = BigInteger.Pow(Int64.MaxValue, 2);
Console.WriteLine(value.ToString("R"));
}
}
// The example displays the following output:
// 85070591730234615847396907784232501249
Imports System.Numerics
Module Example
Public Sub Main()
Dim value = BigInteger.Pow(Int64.MaxValue, 2)
Console.WriteLine(value.ToString("R"))
End Sub
End Module
' The example displays the following output:
' 85070591730234615847396907784232501249
Penting
Dalam beberapa kasus, Double nilai yang diformat dengan string format numerik standar "R" tidak berhasil pulang pergi jika dikompilasi /platform:x64
menggunakan atau /platform:anycpu
beralih dan berjalan pada sistem 64-bit. Lihat paragraf berikut untuk informasi selengkapnya.
Untuk mengatasi masalah Double nilai yang diformat dengan string format numerik standar "R" tidak berhasil melakukan round-tripping jika dikompilasi menggunakan /platform:x64
atau /platform:anycpu
beralih dan berjalan pada sistem 64-bit, Anda dapat memformat Double nilai dengan menggunakan string format numerik standar "G17". Contoh berikut menggunakan string format "R" dengan Double nilai yang tidak berhasil pulang pergi, dan juga menggunakan string format "G17" untuk berhasil melakukan perjalanan pulang pergi nilai asli:
Console.WriteLine("Attempting to round-trip a Double with 'R':");
double initialValue = 0.6822871999174;
string valueString = initialValue.ToString("R",
CultureInfo.InvariantCulture);
double roundTripped = double.Parse(valueString,
CultureInfo.InvariantCulture);
Console.WriteLine($"{initialValue:R} = {roundTripped:R}: {initialValue.Equals(roundTripped)}\n");
Console.WriteLine("Attempting to round-trip a Double with 'G17':");
string valueString17 = initialValue.ToString("G17",
CultureInfo.InvariantCulture);
double roundTripped17 = double.Parse(valueString17,
CultureInfo.InvariantCulture);
Console.WriteLine($"{initialValue:R} = {roundTripped17:R}: {initialValue.Equals(roundTripped17)}\n");
// If compiled to an application that targets anycpu or x64 and run on an x64 system,
// the example displays the following output:
// Attempting to round-trip a Double with 'R':
// .NET Framework:
// 0.6822871999174 = 0.68228719991740006: False
// .NET:
// 0.6822871999174 = 0.6822871999174: True
//
// Attempting to round-trip a Double with 'G17':
// 0.6822871999174 = 0.6822871999174: True
Imports System.Globalization
Module Example
Public Sub Main()
Console.WriteLine("Attempting to round-trip a Double with 'R':")
Dim initialValue As Double = 0.6822871999174
Dim valueString As String = initialValue.ToString("R",
CultureInfo.InvariantCulture)
Dim roundTripped As Double = Double.Parse(valueString,
CultureInfo.InvariantCulture)
Console.WriteLine("{0:R} = {1:R}: {2}",
initialValue, roundTripped, initialValue.Equals(roundTripped))
Console.WriteLine()
Console.WriteLine("Attempting to round-trip a Double with 'G17':")
Dim valueString17 As String = initialValue.ToString("G17",
CultureInfo.InvariantCulture)
Dim roundTripped17 As Double = double.Parse(valueString17,
CultureInfo.InvariantCulture)
Console.WriteLine("{0:R} = {1:R}: {2}",
initialValue, roundTripped17, initialValue.Equals(roundTripped17))
End Sub
End Module
' If compiled to an application that targets anycpu or x64 and run on an x64 system,
' the example displays the following output:
' Attempting to round-trip a Double with 'R':
' .NET Framework:
' 0.6822871999174 = 0.68228719991740006: False
' .NET:
' 0.6822871999174 = 0.6822871999174: True
'
' Attempting to round-trip a Double with 'G17':
' 0.6822871999174 = 0.6822871999174: True
Penentu format heksadesimal (X)
Penentu format heksadesimal ("X") mengonversi angka menjadi string digit heksadesimal. Kasus penentu format menunjukkan apakah akan menggunakan karakter huruf besar atau kecil untuk digit heksadesimal yang lebih besar dari 9. Misalnya, gunakan "X" untuk menghasilkan "ABCDEF", dan "x" untuk menghasilkan "abcdef". Format ini hanya didukung untuk jenis integral.
Penentu presisi menunjukkan jumlah minimum digit yang diinginkan dalam string yang dihasilkan. Jika diperlukan, angka diisi dengan nol di sebelah kirinya untuk menghasilkan jumlah digit yang diberikan oleh penentu presisi.
String hasil tidak dipengaruhi oleh informasi pemformatan objek saat ini NumberFormatInfo .
Contoh berikut memformat Int32 nilai dengan penentu format heksadesimal.
int value;
value = 0x2045e;
Console.WriteLine(value.ToString("x"));
// Displays 2045e
Console.WriteLine(value.ToString("X"));
// Displays 2045E
Console.WriteLine(value.ToString("X8"));
// Displays 0002045E
value = 123456789;
Console.WriteLine(value.ToString("X"));
// Displays 75BCD15
Console.WriteLine(value.ToString("X2"));
// Displays 75BCD15
Dim value As Integer
value = &h2045e
Console.WriteLine(value.ToString("x"))
' Displays 2045e
Console.WriteLine(value.ToString("X"))
' Displays 2045E
Console.WriteLine(value.ToString("X8"))
' Displays 0002045E
value = 123456789
Console.WriteLine(value.ToString("X"))
' Displays 75BCD15
Console.WriteLine(value.ToString("X2"))
' Displays 75BCD15
Catatan
Bagian ini berisi informasi tambahan tentang menggunakan string format numerik standar.
Pengaturan Panel Kontrol
Pengaturan dalam item Opsi Regional dan Bahasa di Panel Kontrol memengaruhi string hasil yang dihasilkan oleh operasi pemformatan. Pengaturan tersebut NumberFormatInfo digunakan untuk menginisialisasi objek yang terkait dengan budaya saat ini, yang menyediakan nilai yang digunakan untuk mengatur pemformatan. Komputer yang menggunakan pengaturan berbeda menghasilkan string hasil yang berbeda.
Selain itu, jika CultureInfo(String) konstruktor digunakan untuk membuat instans objek baru CultureInfo yang mewakili budaya yang sama dengan budaya sistem saat ini, penyesuaian apa pun yang ditetapkan oleh item Opsi Regional dan Bahasa di Panel Kontrol akan diterapkan ke objek baru CultureInfo . Anda dapat menggunakan CultureInfo(String, Boolean) konstruktor untuk membuat CultureInfo objek yang tidak mencerminkan kustomisasi sistem.
Properti NumberFormatInfo
Pemformatan dipengaruhi oleh properti objek saat ini NumberFormatInfo , yang disediakan secara implisit oleh budaya saat ini atau secara eksplisit oleh IFormatProvider parameter metode yang memanggil pemformatan. NumberFormatInfo Tentukan objek atau CultureInfo untuk parameter tersebut.
Nota
Untuk informasi tentang menyesuaikan pola atau string yang digunakan dalam memformat nilai numerik, lihat NumberFormatInfo topik kelas.
Jenis numerik integral dan floating-point
Beberapa deskripsi penentu format numerik standar mengacu pada jenis numerik integral atau floating-point. Jenis numerik integral adalah Byte, , SByte, Int16, Int32Int64, UInt16, UInt32, UInt64, dan BigInteger. Jenis numerik floating-point adalah Decimal, , HalfSingle, dan Double.
Infinitas titik mengambang dan NaN
Terlepas dari string format, jika nilai jenis Half, , Singleatau Double floating-point adalah infinitas positif, tak terbatas negatif, atau bukan angka (NaN), string yang diformat adalah nilai masing-masing PositiveInfinitySymbol, , NegativeInfinitySymbolatau NaNSymbol properti yang ditentukan oleh objek yang saat ini berlaku NumberFormatInfo .
Contoh kode
Contoh berikut memformat nilai numerik integral dan floating-point menggunakan budaya en-US dan semua penentu format numerik standar. Contoh ini menggunakan dua jenis numerik tertentu (Double dan ), tetapi akan menghasilkan hasil yang sama untuk salah satu jenis dasar numerik lainnya (Int32, ByteSByteInt16Int32Int64UInt16, UInt32, UInt64, BigInteger, Decimal, , dan ).HalfSingle
// Display string representations of numbers for en-us culture
CultureInfo ci = new CultureInfo("en-us");
// Output floating point values
double floating = 10761.937554;
Console.WriteLine($"C: {floating.ToString("C", ci)}"); // Displays "C: $10,761.94"
Console.WriteLine($"E: {floating.ToString("E03", ci)}"); // Displays "E: 1.076E+004"
Console.WriteLine($"F: {floating.ToString("F04", ci)}"); // Displays "F: 10761.9376"
Console.WriteLine($"G: {floating.ToString("G", ci)}"); // Displays "G: 10761.937554"
Console.WriteLine($"N: {floating.ToString("N03", ci)}"); // Displays "N: 10,761.938"
Console.WriteLine($"P: {(floating/10000).ToString("P02", ci)}"); // Displays "P: 107.62 %"
Console.WriteLine($"R: {floating.ToString("R", ci)}"); // Displays "R: 10761.937554"
Console.WriteLine();
// Output integral values
int integral = 8395;
Console.WriteLine($"C: {integral.ToString("C", ci)}"); // Displays "C: $8,395.00"
Console.WriteLine($"D: {integral.ToString("D6", ci)}"); // Displays "D: 008395"
Console.WriteLine($"E: {integral.ToString("E03", ci)}"); // Displays "E: 8.395E+003"
Console.WriteLine($"F: {integral.ToString("F01", ci)}"); // Displays "F: 8395.0"
Console.WriteLine($"G: {integral.ToString("G", ci)}"); // Displays "G: 8395"
Console.WriteLine($"N: {integral.ToString("N01", ci)}"); // Displays "N: 8,395.0"
Console.WriteLine($"P: {(integral/10000.0).ToString("P02", ci)}"); // Displays "P: 83.95 %"
Console.WriteLine($"X: 0x{integral.ToString("X", ci)}"); // Displays "X: 0x20CB"
Console.WriteLine();
Option Strict On
Imports System.Globalization
Imports System.Threading
Module NumericFormats
Public Sub Main()
' Display string representations of numbers for en-us culture
Dim ci As New CultureInfo("en-us")
' Output floating point values
Dim floating As Double = 10761.937554
Console.WriteLine("C: {0}", _
floating.ToString("C", ci)) ' Displays "C: $10,761.94"
Console.WriteLine("E: {0}", _
floating.ToString("E03", ci)) ' Displays "E: 1.076E+004"
Console.WriteLine("F: {0}", _
floating.ToString("F04", ci)) ' Displays "F: 10761.9376"
Console.WriteLine("G: {0}", _
floating.ToString("G", ci)) ' Displays "G: 10761.937554"
Console.WriteLine("N: {0}", _
floating.ToString("N03", ci)) ' Displays "N: 10,761.938"
Console.WriteLine("P: {0}", _
(floating / 10000).ToString("P02", ci)) ' Displays "P: 107.62 %"
Console.WriteLine("R: {0}", _
floating.ToString("R", ci)) ' Displays "R: 10761.937554"
Console.WriteLine()
' Output integral values
Dim integral As Integer = 8395
Console.WriteLine("C: {0}", _
integral.ToString("C", ci)) ' Displays "C: $8,395.00"
Console.WriteLine("D: {0}", _
integral.ToString("D6")) ' Displays "D: 008395"
Console.WriteLine("E: {0}", _
integral.ToString("E03", ci)) ' Displays "E: 8.395E+003"
Console.WriteLine("F: {0}", _
integral.ToString("F01", ci)) ' Displays "F: 8395.0"
Console.WriteLine("G: {0}", _
integral.ToString("G", ci)) ' Displays "G: 8395"
Console.WriteLine("N: {0}", _
integral.ToString("N01", ci)) ' Displays "N: 8,395.0"
Console.WriteLine("P: {0}", _
(integral / 10000).ToString("P02", ci)) ' Displays "P: 83.95 %"
Console.WriteLine("X: 0x{0}", _
integral.ToString("X", ci)) ' Displays "X: 0x20CB"
Console.WriteLine()
End Sub
End Module