Memformat float ke 2 tempat desimal

210

Saat ini saya sedang membangun modul penjualan untuk situs web klien. Sejauh ini saya sudah mendapatkan harga jual untuk menghitung dengan sempurna tetapi di mana saya terjebak adalah memformat output ke 2 tempat desimal.

Saya saat ini memanggil ini dalam variabel sehingga saya dapat data mengikat hasil ke tampilan daftar.

Sale = float.Parse(((x.Sale_Price - (x.Sale_Price * (x.Discount_Price / 100))).ToString())),

Adakah yang bisa menunjukkan kepada saya bagaimana memformat output ke 2 tempat desimal ?? Terimakasih banyak!

Callum
sumber
Periksa ini saya tidak yakin tetapi mungkin itu akan berfungsi ToString ("#. ##");
Syeda

Jawaban:

467

Anda dapat mengirimkan format ke ToStringmetode, misalnya:

myFloatVariable.ToString("0.00"); //2dp Number

myFloatVariable.ToString("n2"); // 2dp Number

myFloatVariable.ToString("c2"); // 2dp currency

String Format Angka Standar

WraithNath
sumber
38
"N2" dan "C2" akan menambah ribuan pemisah sementara "0,00" tidak akan.
Marc K
5
Kalau-kalau Anda tidak yakin (saya), semua cara ini untuk memformat nilai float memang memberikan pembulatan.
RenniePet
46

Hal pertama yang perlu Anda lakukan adalah menggunakan decimaltipe bukan floatuntuk harga. Penggunaan floatsama sekali tidak dapat diterima karena itu tidak dapat secara akurat mewakili sebagian besar pecahan desimal.

Setelah Anda selesai melakukannya, Decimal.Round()dapat digunakan untuk membulatkan ke 2 tempat.

Michael Borgwardt
sumber
36

String.Format("{0:#,###.##}", value)

Contoh yang lebih kompleks dari Pemformatan String di C # :

String.Format("{0:$#,##0.00;($#,##0.00);Zero}", value);

Ini akan menghasilkan "$ 1,240.00" jika melewati 1243.50. Ini akan menampilkan format yang sama tetapi dalam tanda kurung jika angkanya negatif, dan akan menghasilkan string "Nol" jika angkanya nol.

alexandrul
sumber
25

Aku percaya:

String.Format("{0:0.00}",Sale);

Harus melakukannya.

Lihat Contoh Format Tautan String C #

Sedikit
sumber
4
string outString= number.ToString("####0.00");
danyolgiax
sumber
1
Ada perbedaan antara "0" dan "#" dalam format khusus. "0": Mengganti nol dengan digit yang sesuai jika ada; jika tidak, nol muncul di string hasil. "#": Mengganti simbol "#" dengan angka yang sesuai jika ada; jika tidak, tidak ada digit yang muncul di string hasil. Referensi
劉鎮 瑲
3

Seperti yang telah disebutkan, Anda harus menggunakan hasil yang diformat; yang semuanya dilakukan melalui Write(),WriteLine() , Format(), dan ToString()metode.

Apa yang belum disebutkan adalah Format titik-Tetap yang memungkinkan jumlah desimal tertentu. Ini menggunakan 'F' dan angka yang mengikuti 'F' adalah jumlah tempat desimal yang dihasilkan, seperti yang ditunjukkan dalam contoh.

Console.WriteLine("{0:F2}", 12);    // 12.00 - two decimal places
Console.WriteLine("{0:F0}", 12.3);  // 12 - ommiting fractions
Jackson
sumber
2

Ini untuk kasus-kasus yang ingin Anda gunakan string interpolasi . Saya sebenarnya memposting ini karena saya bosan dengan trial and error dan akhirnya menelusuri banyak dokumen setiap kali saya perlu memformat skalar.

$"{1234.5678:0.00}"        "1234.57"        2 decimal places, notice that value is rounded
$"{1234.5678,10:0.00}"     "   1234.57"     right-aligned
$"{1234.5678,-10:0.00}"    "1234.57   "     left-aligned
$"{1234.5678:0.#####}"     "1234.5678"      5 optional digits after the decimal point
$"{1234.5678:0.00000}"     "1234.56780"     5 forced digits AFTER the decimal point, notice the trailing zero
$"{1234.5678:00000.00}"    "01234.57"       5 forced digits BEFORE the decimal point, notice the leading zero
$"{1234.5612:0}"           "1235"           as integer, notice that value is rounded
$"{1234.5678:F2}"          "1234.57"        standard fixed-point
$"{1234.5678:F5}"          "1234.56780"     5 digits after the decimal point, notice the trailing zero
$"{1234.5678:g2}"          "1.2e+03"        standard general with 2 meaningful digits, notice "e"
$"{1234.5678:G2}"          "1.2E+03"        standard general with 2 meaningful digits, notice "E"
$"{1234.5678:G3}"          "1.23E+03"       standard general with 3 meaningful digits
$"{1234.5678:G5}"          "1234.6"         standard general with 5 meaningful digits
$"{1234.5678:e2}"          "1.23e+003"      standard exponential with 2 digits after the decimal point, notice "e"
$"{1234.5678:E3}"          "1.235E+003"     standard exponential with 3 digits after the decimal point, notice "E"
$"{1234.5678:N2}"          "1,234.57"       standard numeric, notice the comma
$"{1234.5678:C2}"          "$1,234.57"      standard currency, notice the dollar sign
$"{1234.5678:P2}"          "123,456.78 %"   standard percent, notice that value is multiplied by 100
$"{1234.5678:2}"           "2"              :)

Peringatan Kinerja

String interpolasi lambat. Dalam pengalaman saya ini adalah urutannya (cepat ke lambat):

  1. value.ToString(format)+" blah blah"
  2. string.Format("{0:format} blah blah", value)
  3. $"{value:format} blah blah"
Saastn
sumber