Witam!
Pytanie jak w temacie przechowuje wartosc w decimal (np 123.23, lub 12.94)
W jaki sposob wyswietlic tylko czesc po kropce czyli (23 oraz 94)
W decimal przechowuje cene chcialbym ja rozdzielic pierwsza uzyskuje dodajac @payment.price.to_i co wyswietla tylko calkowita czesc czy wie ktos jak wyswietlic czesc dziesietna?
Może Ci pomóc funkcja frac: http://www.ruby-doc.org/stdlib-1.9.3/libdoc/bigdecimal/rdoc/BigDecimal.html#method-i-frac
[code=ruby]require ‘bigdecimal’
require ‘bigdecimal/util’
a = BigDecimal.new(‘1.23’)
a.frac.to_digits #=> 0.23[/code]
Skoro wiesz jak oddzielić część całkowitą to możesz ją odjąć od liczby wyjściowej.
(@payment.price%1*100).to_i
Pytanie do wyjadaczy: dlaczego jest potrzebny nawias? Wiem, że mnożenie Floatów to ryzykowna sprawa, ale wygląda na to, że 100.to_i jest wykonywane przed x*100.
To jest przede wszystkim zły pomysł który może dać niepoprawne wyniki (floaty są nietrywialne)
irb(main):008:0> p = 12.34
=> 12.34
irb(main):009:0> (p%1*100).to_i
=> 33
A jeśli ktoś nie wie o co chodzi, to nieśmiało przypominam że float ma zawsze ograniczoną precyzję i jeśli się sensownie tego nie zaokrągla (tylko na pałę obcina, jak to_i) to wychodzą jaja
irb(main):020:0> sprintf("%.10f", (p))
=> "12.3400000000"
irb(main):021:0> sprintf("%.16f", (p))
=> "12.3399999999999999"
Dlatego lepszym pomysłem jest .round. ZAWSZE.
irb(main):022:0> (p%1*100).to_i
=> 33
irb(main):023:0> (p%1*100).round
=> 34
Dzięki o to chodziło
Jeśli możesz przechowuj cenę w centach/groszach (tylko inty). Wszystkie powyższe problemy (przybliżanie, format itp) znikają
W czasach kiedy typ DECIMAL jest standardem w ANSI SQL? Prośba.
Witam, podobnie jak Tomash chciałem zaproponować odjęcie liczby całkowitej w celu uzystkania części po przecinku, jednak przed napisaniem chciałem to zweryfikować. Co ciekawe
[quote]1.9.3-p385 :007 > a = 1.22
=> 1.22
1.9.3-p385 :008 > a - a.to_i
=> 0.21999999999999997
1.9.3-p385 :009 > a.to_i
=> 1
1.9.3-p385 :010 > a.to_f.to_i
=> 1
1.9.3-p385 :011 > a - a.to_f.to_i
=> 0.21999999999999997[/quote]
Zapewne jest to związane przetrzymywaniem liczb zmiennopozycyjnych w pamięci które jest inne niż integer i podczas konwersji następuje utrata bitów jeśli jednak nie to może mi to ktoś wytłumaczyć ?
Z góry dzięki
Przepraszam za odpowiedź typu “guglnij”, ale wrzucenie “understanding floating point numbers” zwraca tyle naprawdę fajnie wyjaśniających temat stron (w tym anglojęzyczna wikipedia) że aż nie wiem co jest bardziej warte polecenia
Trochę nie na temat…
Tomash, taka jest funkcja forum dyskusyjnego - jeśli człowiek pyta tutaj, to oczekuje od kogoś odpowiedzi na właśnie tej stronie, a nie wśród “tysięcy” innych wyników w “guglach”. Jaki jest sens nabijać posty na forum i mówić wszystkim aby wyszukiwali na innych stronach, a przeglądając twoje posty można stwierdzić “zawsze tak robisz”. Sprawiasz wrażenie osoby która nie ma kompletnego pojęcia jak działa tego typu forum, mimo lat doświadczeń - jak większość biało-czerwonych w sieci zresztą
Jeśli mogę prosić, nie odpowiadaj na ten post, tylko przeczytaj i zastanów się kilka razy czy jest sens robienia czegoś takiego i moderator może to skasować
[quote=eGlaza]Trochę nie na temat…
Tomash, taka jest funkcja forum dyskusyjnego - jeśli człowiek pyta tutaj, to oczekuje od kogoś odpowiedzi na właśnie tej stronie, a nie wśród “tysięcy” innych wyników w “guglach”. Jaki jest sens nabijać posty na forum i mówić wszystkim aby wyszukiwali na innych stronach, a przeglądając twoje posty można stwierdzić “zawsze tak robisz”. Sprawiasz wrażenie osoby która nie ma kompletnego pojęcia jak działa tego typu forum, mimo lat doświadczeń - jak większość biało-czerwonych w sieci zresztą ;)[/quote]
Nie napisałem “guglnij” czy innego burackiego “rtfm” (sam za to gonię), tylko podałem gotową kwerendę do gugla którą sam sprawdziłem i z której pierwsze pięć wyników mogę z czystym sumieniem polecić. Sam wolę dostać coś takiego (przy okazji uczy dobrego formułowania kwerend) niż ludzi którzy wrzucają zapytanie w gugla i przeklejają pierwsze trzy linki, nierzadko i co gorsza nieodnoszące się do bieżącego problemu.
Ale masz trochę racji, lepiej będzie podać konkretny wynik odnoszący się do tematu:
http://support.microsoft.com/kb/42980
Dzięki
A tak na przyszłość bardzo fajny post związany z tym tematem:
http://stackoverflow.com/questions/8514167/float-vs-decimal-in-activerecord