Sudah ada dua jawaban skor tinggi yang merujuk ke Desimal. Putaran (...) tapi saya pikir sedikit lebih banyak penjelasan diperlukan - karena ada sifat penting tak terduga dari Desimal yang tidak jelas.
Desimal 'tahu' berapa banyak tempat desimal yang didasarkan pada dari mana asalnya.
Misalnya, hal-hal berikut mungkin tidak terduga:
Decimal.Parse("25").ToString() => "25"
Decimal.Parse("25.").ToString() => "25"
Decimal.Parse("25.0").ToString() => "25.0"
Decimal.Parse("25.0000").ToString() => "25.0000"
25m.ToString() => "25"
25.000m.ToString() => "25.000"
Melakukan operasi yang sama dengan tidak Double
akan memberikan tempat desimal ( "25"
) untuk masing-masing di atas.
Ketika Anda ingin desimal ke 2 tempat desimal, ada kemungkinan 95% karena mata uangnya dalam hal ini mungkin baik untuk 95% waktu:
Decimal.Parse("25.0").ToString("c") => "$25.00"
Atau di XAML yang baru saja Anda gunakan {Binding Price, StringFormat=c}
Satu kasus saya berlari ke tempat saya membutuhkan AS desimal desimal adalah ketika mengirim XML ke layanan web Amazon. Layanan ini mengeluh karena nilai Desimal (berasal dari SQL Server) dikirim sebagai 25.1200
dan ditolak, ( 25.12
adalah format yang diharapkan).
Yang perlu saya lakukan adalah Decimal.Round(...)
dengan 2 tempat desimal untuk memperbaiki masalah.
// This is an XML message - with generated code by XSD.exe
StandardPrice = new OverrideCurrencyAmount()
{
TypedValue = Decimal.Round(product.StandardPrice, 2),
currency = "USD"
}
TypedValue
adalah tipe Decimal
jadi saya tidak bisa hanya melakukan ToString("N2")
dan perlu untuk memutarnya dan menyimpannya sebagai decimal
.
Decimal
danDouble
ketikToString
metode menerima argumen untuk pemformatan. Coba konversi nilai Anda ke Desimal / Double terlebih dahulu.