2012-10-25 11 views
27

Mam numer typu double. double a = 12.00 muszę zrobić to jako 12 poprzez usunięcie .00Jak usunąć część dziesiętną z numeru w C#

Proszę mi pomóc

+0

Podwójny zaokrąglony będzie nadal daje .00. Zamiast tego, jeśli chcesz mieć tylko 12, powinieneś spróbować rzucić to na int, aby pozbyć się części dziesiętnej! Rozwiązanie Look @ Habib dla wyraźnej obsady! – Nauman

+0

Gdzie chcesz "zrobić 12"? 'a.ToString()'? –

+0

http://stackoverflow.com/questions/4525854/remove-trailing-zeros może to ci pomoże. –

Odpowiedz

38

No 12 i 12.00 mają dokładnie taką samą reprezentację jako double wartości. Czy próbujesz skończyć z double lub czymś innym? (Na przykład, można rzutować na int, jeśli byli przekonani wartość byłaby we właściwym zakresie, a jeśli efekt obcięcia to, co chcesz.)

Możecie zajrzeć do tych metod zbyt:

+0

Cześć dzięki za twoją sugestię. Mam numer, który ma wartość jako 12,00. Chcę zrobić to jako tylko 12. Chcę usunąć .00.Ale nie jestem w stanie zrobić, ponieważ otrzymuję 12.0 z moim kodem re = Convert.ToDouble (txtModifedTotalAmount.Text.Trim(), CultureInfo.InvariantCulture); if (re - Math.Truncate (re) == 0.00) re = Math.Truncate (re); – Divya

+0

@Divya: Są one jednak tej samej wartości - 12, 12,0, 12,00, 12,00000 będą miały taką samą reprezentację jak wartości "podwójne". Jeśli masz na myśli, że wyświetla się jako "12.0", gdy formatujesz go jako ciąg znaków, to jest inna sprawa - i po prostu część formatowania ciągów znaków. Lub jeśli zawsze otrzymasz liczbę całkowitą i chcesz tylko * traktować * jako liczbę całkowitą, po prostu rzuć na 'int' lub' long'. –

+0

Mam w bazie danych sql 'decimal (18,3)' z ** wartości wejściowych **: 1.000, 11.124, 127.414, 1377.147, ** Oczekiwany wynik: ** 1, 11, 127, 1377, widzisz, że muszę usunąć skalę po przecinku, muszę zachować ostrożność, aby móc wykonywać obliczenia za pomocą 'int', więc powinno mogę rzucić na 'int' lub użyć' Math.Round' lub podzielić go za pomocą ciągu? – stom

22

Jeśli po prostu potrzebujesz części całkowitej podwójnej, użyj jawnego rzutowania do int.

int number = (int) a; 

Można użyć Convert.ToInt32 Method (Double), ale to będzie zaokrąglić liczbę do najbliższej liczby całkowitej.

wartość, zaokrąglona do najbliższej 32-bitowej liczby całkowitej ze znakiem. Jeśli wartość wynosi w połowie drogi między dwiema liczbami całkowitymi, zwracana jest liczba parzysta; że jest 4,5 przekształca się w 4 i 5.5 jest przekształcany do 6.

+0

czy zwracasz uwagę na ** błąd zaokrągleń ** ?? –

+1

umm co "Błąd zaokrąglania"? nie byłoby zaokrąglania w '(int) a;' * (pierwsza część) *, zaokrąglenie w 'Convert.ToInt32' nie jest błędem zaokrąglonym, zamiast tego jest domyślnym [zaokrągleniem bankiera] (http://stackoverflow.com/questions/311696/why-does-net-use-bankers-rounding-as-default) – Habib

+0

'float f = 1,4f; int truncated = (int) ((f- (int) f) * 100); "Więc, jakie jest twoje oczekiwanie na zmienną' ścięty'? ** 40 **? Nop, to 39. Z powodu ** błędu zaokrągleń ** –

2

o to sztuczka

a = double.Parse(a.ToString().Split(',')[0]) 
Powiązane problemy