Putaran ganda di dua tempat desimal di C #?

258

Saya ingin mengumpulkan nilai ganda di dua tempat desimal di c # bagaimana saya bisa melakukan itu?

double inputValue = 48.485;

setelah dibulatkan

inputValue = 48.49;

Terkait: c # - Bagaimana cara saya membulatkan nilai desimal ke 2 tempat desimal (untuk output pada halaman)

sanjeev40084
sumber
Perhatikan bahwa Anda tidak dapat mewakili semua nilai floating point menggunakan dobel dan ini dapat membuat Anda tersandung saat pembulatan
Liam

Jawaban:

479

Ini bekerja:

inputValue = Math.Round(inputValue, 2);
Alex LE
sumber
solusi untuk trunc float: float myTruncFloat = float.Parse (Math.Round (myFloat, 2) .ToString ());
Piero Alberto
1
Jika nilainya 48.0000. Tidak akan menghasilkan 48,00. dobel inputValue = 48,00; inputValue = Math.Round (inputValue, 2); hanya akan menghasilkan 48. Ada warkaound?
user1926138
100
Math.Round(inputValue, 2, MidpointRounding.AwayFromZero)
nandin
sumber
4
Ini sebenarnya yang harus digunakan. Sebagian besar operasi di bank dll dilakukan dengan menggunakan metode ini (MidpointRounding.AwayFromZero).
MadBoy
41
menunjukkan bahwa bank menggunakan ganda adalah dude menakutkan, jangan gunakan nilai perkiraan untuk mata uang.
raggi
6
@raggi Saya khawatir beberapa (bank) melakukan ... Itu akan menjelaskan banyak hal
SparK
4
Ya, saya percaya inilah yang dibuat setelah film 'Office Space' - menuntaskan pecahan sen yang tidak akan disadari siapa pun. Poin yang bagus untuk berhati-hati tentang kapan harus menggunakan pembulatan secara sewenang-wenang.
atconway
1
Dan sebagai bagian dari plot salah satu film Superman asli sudah lama sekali.
James Westgate
25

Kamu harus menggunakan

inputvalue=Math.Round(inputValue, 2, MidpointRounding.AwayFromZero)

Matematika

Math.Round membulatkan nilai floating-point presisi ganda ke jumlah digit pecahan tertentu.

MidpointRounding

Menentukan bagaimana metode pembulatan matematis harus memproses angka yang berada di antara dua angka.

Pada dasarnya fungsi di atas akan mengambil nilai input Anda dan membulatkannya menjadi 2 (atau nomor mana pun yang Anda tentukan) tempat desimal. Dengan MidpointRounding.AwayFromZeroketika angka berada di antara dua lainnya, itu dibulatkan ke angka terdekat yang jauh dari nol. Ada juga opsi lain yang bisa Anda gunakan untuk putaran ke angka genap terdekat.

Pengukur
sumber
25

Cara mudah lainnya adalah menggunakan ToString dengan parameter. Contoh:

float d = 54.9700F;    
string s = d.ToString("N2");
Console.WriteLine(s);

Hasil:

54.97
Diwas
sumber
19

Gunakan Math.Round

value = Math.Round(48.485, 2);
rekursif
sumber
Kalahkan saya untuk itu (walaupun saya akan menambahkan titik koma di sana juga;))
Reed Copsey
1
Namun, berhati-hatilah dengan MidpointRounding: "Jika nilai digit pertama di nilai di sebelah kanan posisi desimal digit adalah 5, digit di posisi digit dibulatkan ke atas jika aneh, atau dibiarkan tidak berubah jika bahkan"
Matthias
8

Anda dapat mencobanya dari bawah. Ada banyak cara untuk ini.

1. 
 value=Math.Round(123.4567, 2, MidpointRounding.AwayFromZero) //"123.46"
2.
 inputvalue=Math.Round(123.4567, 2)  //"123.46"
3. 
 String.Format("{0:0.00}", 123.4567);      // "123.46"
4. 
string.Format("{0:F2}", 123.456789);     //123.46
string.Format("{0:F3}", 123.456789);     //123.457
string.Format("{0:F4}", 123.456789);     //123.4568
reza.cse08
sumber
Saya menggunakan opsi keempat. Menulis F6 bekerja untuk saya lebih baik daripada menulis 6 nol ;-)
Maurice Klimek
2

Gunakan string interpolasi, ini menghasilkan string yang dibulatkan ke atas:

var strlen = 6;
$"{48.485:F2}"

Keluaran

"48.49"
bigpony
sumber