C # iki ondalık basamaklarda çift yuvarlak?


Yanıtlar:


480

Bu çalışıyor:

inputValue = Math.Round(inputValue, 2);

trunc float için geçici çözüm: float myTruncFloat = float.Parse (Math.Round (myFloat, 2) .ToString ());
Piero Alberto

2
Değer 48.0000 ise. 48.00 ile sonuçlanmaz. çift ​​giriş Değer = 48.00; inputValue = Math.Round (inputValue, 2); yalnızca 48 sonucunu verir. Herhangi bir warkaound var mı?
user1926138

100
Math.Round(inputValue, 2, MidpointRounding.AwayFromZero)

4
Aslında kullanılması gereken budur. Bankalarda vb. İşlemlerin çoğu bu yöntem kullanılarak yapılır (MidpointRounding.AwayFromZero).
MadBoy

42
bankaların iki katına çıktıklarını korkutmak dostum, para birimi için yaklaşık değerleri kullanmayın.
raggi

6
@raggi Korkarım bazı (bankalar) yapmak ... Bu bir çok şeyi açıklar
SparK

4
Evet, inanıyorum ki bu 'Ofis Alanı' filmi, kimsenin fark etmeyeceği sent bölümlerini yuvarladıktan sonra yapıldı. Yuvarlamayı ne zaman keyfi kullanacağınıza dikkat etmek iyi bir nokta.
atconway

1
Ve orijinal Superman filmlerinden birinin planının bir parçası olarak uzun zaman önce waaay.
James Westgate

25

Kullanmalısın

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

Math.Round

Math.Round, çift kesinlikli kayar nokta değerini belirtilen sayıda kesirli basamağa yuvarlar.

MidpointRounding

Matematiksel yuvarlama yöntemlerinin iki sayının ortasında olan bir sayıyı nasıl işlemesi gerektiğini belirtir.

Temel olarak yukarıdaki işlev giriş değerinizi alır ve 2 (veya belirttiğiniz sayı) ondalık basamağa yuvarlar. İle MidpointRounding.AwayFromZerobir iki numara diğerleri arasında yarım olduğunda, doğru yuvarlanır sıfırdan uzaklıktadır yakın sayıya. En yakın çift sayıya yuvarlayabileceğiniz başka bir seçenek daha var.


25

Bir başka kolay yol da ToString'i bir parametre ile kullanmaktır. Misal:

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

Sonuç:

54.97

19

Math.Round kullanın

value = Math.Round(48.485, 2);

Beni döv (orada ben de bir iki nokta üst üste eklememe rağmen;))
Reed Copsey

1
Ancak, MidpointRounding'e dikkat edin: "Rakam ondalık konumunun sağındaki değerdeki ilk basamağın değeri 5 ise, basamaktaki basamak tekse yuvarlanır, hatta çiftse değişmeden kalır"
Matthias

8

aşağıdan birini deneyebilirsiniz. bunun için birçok yol var.

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

Dördüncü seçeneği kullandım. F6 yazmak benim için 6 sıfır yazmaktan daha iyi çalıştı ;-)
Maurice Klimek

2

Enterpolasyonlu bir dize kullanın, bu yuvarlatılmış bir dize oluşturur:

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

Çıktı

"48.49"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.