naprawdę potrzebujesz tego po 10 latach dziwnych? lol
L_Church
1
dlaczego po 10 latach jest nagroda? jest już wiele odpowiedzi. czy czegoś tu brakuje?
Kałuża
3
Ten facet zadał tylko 1 pytanie i od tego czasu opuścił witrynę. Wydaje mi się, że to wszystko, co zawsze chciał wiedzieć ...: D
Nikos,
Odpowiedzi:
484
Math.Floorzaokrągla w dół, Math.Ceilingzaokrągla w górę i Math.Truncatezaokrągla w kierunku zera. Tak Math.Truncatejest jak Math.Floordla liczb dodatnich i jak Math.Ceilingdla liczb ujemnych. Oto odniesienie .
Dla kompletności, Math.Roundzaokrągla do najbliższej liczby całkowitej. Jeśli liczba jest dokładnie w połowie odległości między dwiema liczbami całkowitymi, to zaokrągla się w kierunku parzystej. Odniesienie.
Zobacz także: odpowiedź Paxa Diablo . Wysoce polecany!
@Chris, sugeruję poprawienie opisu Round, istnieją dwa sposoby na zaokrąglenie (AwayFromZero i ToEven) i nie zaokrągla do najbliższej liczby całkowitej, ponieważ może również zaokrąglać ułamek.
paxdiablo
1
Tak więc krótki dodatek do pierwotnego pytania - jaka jest różnica między Math.Truncate a zwykłym rzutowaniem dziesiętnym lub podwójnym na int? czy nie zaokrągliby również do zera?
Noam Gal
8
Kiedy się (int)myDoubleróżni (int)Math.Truncate(myDouble)?
mpen
2
Co jest (int) równe w klasie matematyki?
Lei Yang
386
Skorzystaj z tych linków, aby uzyskać opisy MSDN:
Math.Floor, który zaokrągla w dół w kierunku ujemnej nieskończoności.
Math.Ceiling, który zaokrągla w górę w kierunku dodatniej nieskończoności.
Math.Truncate, który zaokrągla w górę lub w dół w kierunku zera.
Math.Round, który zaokrągla do najbliższej liczby całkowitej lub określonej liczby miejsc dziesiętnych. Możesz określić zachowanie, jeśli jest dokładnie w jednakowej odległości między dwiema możliwościami, takimi jak zaokrąglanie, tak aby ostatnia cyfra była parzysta („ Round(2.5,MidpointRounding.ToEven)” staje się 2) lub tak, że jest dalej od zera („ Round(2.5,MidpointRounding.AwayFromZero)” staje się 3).
Poniższy schemat i tabela mogą pomóc:
-3-2-10123+--|------+---------+----|----+--|------+----|----+-------|-+
a b c d e
a=-2.7 b=-0.5 c=0.3 d=1.5 e=2.8===========================Floor-3-1012Ceiling-20123Truncate-20012Round(ToEven)-30023Round(AwayFromZero)-3-1023
Zauważ, że Roundjest o wiele potężniejszy niż się wydaje, po prostu dlatego, że może zaokrąglać do określonej liczby miejsc po przecinku. Wszystkie pozostałe zawsze zaokrąglają do dziesiętnych. Na przykład:
n =3.145;
a =System.Math.Round(n,2,MidpointRounding.ToEven);// 3.14
b =System.Math.Round(n,2,MidpointRounding.AwayFromZero);// 3.15
W przypadku innych funkcji musisz użyć funkcji zwielokrotniania / dzielenia, aby osiągnąć ten sam efekt:
c =System.Math.Truncate(n *100)/100;// 3.14
d =System.Math.Ceiling(n *100)/100;// 3.15
Dzięki, @dtroy, nigdy nie miałem potrzeby korzystania z tego trybu i chociaż dokumentowałem go poprawnie, jeśli tekst, całkowicie pomyliłem przykłady. Mam nadzieję, że zostało to teraz naprawione.
paxdiablo
Przykro mi, że skomentowałem tak stare pytanie, ale muszę zapytać: Jak zaokrąglić „ToEven” do dwóch miejsc po przecinku? Na pewno dziwne, a nawet dotyczą tylko liczb całkowitych?
Richiban,
4
@Richiban, pomyśl o evenwłasności ostatniej cyfry w zaokrąglonej liczbie, a nie o tym, że cała liczba musi być wielokrotnością dwóch. Nawiasem mówiąc, przepraszam, że tak długo do ciebie dotarłem, mam nadzieję, że nie siedziałeś i czekałeś na moją odpowiedź :-)
paxdiablo
62
Math.Floor() zaokrągla w kierunku ujemnej nieskończoności
Math.Truncate zaokrągla w górę lub w dół w kierunku zera.
Math.floorsliiiide w lewo ... Math.ceilsliiiide w prawo ... Math.truncatecriiiiss crooooss (podłoga / sufit zawsze w kierunku 0) Math.roundcha cha, naprawdę gładka ... (przejdź do najbliższej strony)
Chodźmy do pracy! (⌐ □ _ □)
Po lewej ... Math.floor
Zabierzcie to teraz wszyscy ... --
Tym razem dwa przeskoki ...-=2
Wszyscy klaszczą w dłonie ✋✋
Jak nisko możesz zejść? Czy możesz zejść nisko? Aż do floor?
if(this=="wrong")return"i don't wanna be right";
Math.truncate(x)jest również taki sam jak int(x).
usuwając dodatnią lub ujemną frakcję, zawsze zmierzasz w kierunku 0.
Odpowiedzi:
Math.Floor
zaokrągla w dół,Math.Ceiling
zaokrągla w górę iMath.Truncate
zaokrągla w kierunku zera. TakMath.Truncate
jest jakMath.Floor
dla liczb dodatnich i jakMath.Ceiling
dla liczb ujemnych. Oto odniesienie .Dla kompletności,
Math.Round
zaokrągla do najbliższej liczby całkowitej. Jeśli liczba jest dokładnie w połowie odległości między dwiema liczbami całkowitymi, to zaokrągla się w kierunku parzystej. Odniesienie.Zobacz także: odpowiedź Paxa Diablo . Wysoce polecany!
źródło
(int)myDouble
różni(int)Math.Truncate(myDouble)
?Skorzystaj z tych linków, aby uzyskać opisy MSDN:
Math.Floor
, który zaokrągla w dół w kierunku ujemnej nieskończoności.Math.Ceiling
, który zaokrągla w górę w kierunku dodatniej nieskończoności.Math.Truncate
, który zaokrągla w górę lub w dół w kierunku zera.Math.Round
, który zaokrągla do najbliższej liczby całkowitej lub określonej liczby miejsc dziesiętnych. Możesz określić zachowanie, jeśli jest dokładnie w jednakowej odległości między dwiema możliwościami, takimi jak zaokrąglanie, tak aby ostatnia cyfra była parzysta („Round(2.5,MidpointRounding.ToEven)
” staje się 2) lub tak, że jest dalej od zera („Round(2.5,MidpointRounding.AwayFromZero)
” staje się 3).Poniższy schemat i tabela mogą pomóc:
Zauważ, że
Round
jest o wiele potężniejszy niż się wydaje, po prostu dlatego, że może zaokrąglać do określonej liczby miejsc po przecinku. Wszystkie pozostałe zawsze zaokrąglają do dziesiętnych. Na przykład:W przypadku innych funkcji musisz użyć funkcji zwielokrotniania / dzielenia, aby osiągnąć ten sam efekt:
źródło
even
własności ostatniej cyfry w zaokrąglonej liczbie, a nie o tym, że cała liczba musi być wielokrotnością dwóch. Nawiasem mówiąc, przepraszam, że tak długo do ciebie dotarłem, mam nadzieję, że nie siedziałeś i czekałeś na moją odpowiedź :-)Math.Floor()
zaokrągla w kierunku ujemnej nieskończonościMath.Truncate
zaokrągla w górę lub w dół w kierunku zera.Na przykład:
podczas
źródło
Kilka przykładów:
źródło
Math.floor
sliiiide w lewo ...Math.ceil
sliiiide w prawo ...Math.truncate
criiiiss crooooss (podłoga / sufit zawsze w kierunku 0)Math.round
cha cha, naprawdę gładka ... (przejdź do najbliższej strony)Chodźmy do pracy! (⌐ □ _ □)
Po lewej ...
Math.floor
Zabierzcie to teraz wszyscy ...
--
Tym razem dwa przeskoki ...
-=2
Wszyscy klaszczą w dłonie ✋✋
Jak nisko możesz zejść? Czy możesz zejść nisko? Aż do
floor
?Math.truncate(x)
jest również taki sam jakint(x)
.usuwając dodatnią lub ujemną frakcję, zawsze zmierzasz w kierunku 0.
źródło
Są funkcjonalnie równoważne z liczbami dodatnimi. Różnica polega na tym, jak radzą sobie z liczbami ujemnymi.
Na przykład:
Linki MSDN: - Metoda Math.Floor - Metoda Math.Truncate
PS Uważaj na matematykę. Może nie być to, czego oczekujesz.
Aby uzyskać „standardowy” wynik zaokrąglania, użyj:
źródło
Spróbuj tego, Przykłady:
Math.Floor () vs Math.Truncate ()
Również Math.Round ()
math.floor()
Zwraca największą liczbę całkowitą mniejszą lub równą podanej liczbie. MSDN system.math.floor
math.truncate()
Oblicza integralną część liczby. MSDN system.math.truncate
źródło
Math.Floor()
zaokrągla „w kierunku ujemnej nieskończoności” zgodnie z normą IEEE 754 sekcja 4.Math.Truncate()
zaokrągla „do najbliższej liczby całkowitej w kierunku zera”.źródło
Math.Floor()
: Zwraca największą liczbę całkowitą mniejszą lub równą podanej liczbie zmiennoprzecinkowej podwójnej precyzji.Math.Round()
: Zaokrągla wartość do najbliższej liczby całkowitej lub do określonej liczby cyfr ułamkowych.źródło
Floor()
aTruncate()
nieFloor()
iRound()
.Math.floor()
zawsze będzie zaokrąglać w dół, tzn. zwraca MNIEJSZĄ liczbę całkowitą. Podczas gdyround()
zwróci NAJBLIŻSZĄ liczbę całkowitąmath.floor ()
Zwraca największą liczbę całkowitą mniejszą lub równą podanej liczbie.
math.truncate ()
Oblicza integralną część liczby.
źródło
Obcięcie upuszcza dziesiętne ****
źródło