![]() ![]() |
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%)
|
Cześć,
chcę stworzyć w bazie danych tabelę z rabatami (w procentach) dla poszczególnych użytkowników. Zastanawiam się jakiego typu pola najlepiej użyć. Pomysły:
Dwa pierwsze pomysły są bardzo podobne, ale zastanawia mnie czy użycie float jest w pełni bezpieczne dla dokładności obliczeń, bo jak wiemy z tymi zmiennoprzecinkowymi wartościami różnie bywa. Czy to ma jednak jakiekolwiek znaczenie dla wyniku o tak małej dokładności, jaką jest kwota pieniężna (zaledwie 2 znaki po przecinku)? Drugi pomysł, czyli decimal, to bardziej pewny format - zawsze go używam do zapisywania kwot pieniężnych. Trzeci pomysł to już inna bajka, ale kusi mnie "pewność" takich danych. Liczba całkowita to jednak liczba całkowita, a i dane czytelniejsze i zajmują mniej (1 bajt). Wadą jest to, że trzeba dołożyć operację dzielenia w każdym zapytaniu, co jest trochę upierdliwe. W praktyce pewnie i tak to napiszę obiektowo, więc to nie będzie wielki problem, no ale podebatować można Jak Wy to widzicie? |
|
|
|
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 |
Uzywaj pelnych liczb. Z tymi zmienno przecinkowymi zawsze ni z gruszki ni z pietruszki wyskakują glupoty.
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 556 Pomógł: 40 Dołączył: 20.07.2012 Skąd: Warszawa Ostrzeżenie: (0%)
|
rozwiązanie 3 jest najczytelniejsze i najmniej kłopotliwe na moje, matematyka w zapytaniu do bazy to naprawdę niewielki problem
btw. jak chcesz zrobić 1 lub 2 też musisz w jakiś tam sposób przygotować dane więc tak naprawdę stawiałbym na czytelność danych w bazie |
|
|
|
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%)
|
3, łatwiej później tym operować
|
|
|
|
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%)
|
@nospor
Z decimalem chyba głupoty nie wyskakują, bo on jest zupełnie inaczej przetwarzany niż floaty. @kayman Czytelność danych w bazie mnie nie interesuje, nie będę czytał sobie bazy przed snem @pyton Dlaczego łatwiej operować tinyintem niż decimalem w tym przypadku? Rozwijam dyskusję, chociaż wbrew pozorom nie mam ciśnienia na decimal. Na tym etapie mogę jedynie powiedzieć, że float przegrywa z kretesem |
|
|
|
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 |
Cytat Z decimalem chyba głupoty nie wyskakują, bo on jest zupełnie inaczej przetwarzany niż floaty. Chodzi o liczby rzeczywiste. Niewazne czy decimal czy nie i tak predzej czy poźniej będą z tym kłopoty. Jesli wiec masz mozliwosc, a masz, to jedź na pełnych liczbach a unikniesz zbednych klopotow i przerobek
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
|
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%)
|
Łatwiej bo to int, możesz sobie wyświetlać gdzie chcesz w postaci całkowitej wartości %.
A doliczenie rabatu w jednym miejscu to nie problem. poza tym mały zakres, miało pamięci. Od decimal przy obliczeniu będzie tylko się różnił że do obliczenia int / 100 i nic więcej. reszta zostaje bez zmian w obu przypadkach. |
|
|
|
Post
#8
|
|
|
Grupa: Zarejestrowani Postów: 556 Pomógł: 40 Dołączył: 20.07.2012 Skąd: Warszawa Ostrzeżenie: (0%)
|
|
|
|
|
![]() ![]() |
|
Aktualny czas: 20.08.2025 - 03:17 |