Jako nowy użytkownik na wstępie chciałbym przywitać Wszystkich.
Zaczynam przygodę z R i RoR i mam problem - chciałbym dla testu napisać krótki program obliczający wysokość odsetek ustawowych - w jaki sposób określić ilość dni pomiędzy datą wymagalności roszczenia a datą zapłaty. Znalazłem informacje o przeliczeniu dat na sekundy i ich odjęcia ale nie bardzo wiem jak się do tego zabrać.
Dziękuję za pomoc
Z tego co kojarzę, obiekty typu Date w Rubym możesz normalnie dodawać i odejmować - wyjdzie Ci liczba dni. Próbowałeś w ten sposób?
Jak wpisze daty do kodu to mi rzeczywiście odejmuje ale muszę je wpisać z klawiatury i tu mam kłopot. Wiem że pewnie to są jakieś oczywistości ale dopiero zaczynam i troszkę się w tym wszystkim gubię:(
poczytaj o funkcjach, jesli taka funkcje stworzysz bedzie ona wymagala przeslania do niej 2 parametrow czyli tych dat, pozniej te daty ma od siebie odjac i na koncu zwroci roznice dni
Spróbuj użyć
Date.parse
Chociaż jeśli korzystasz z RoR, to powinien Ci sam ładnie opakować tekst wpisany z klawiatury do formularza w odpowiedni typ, o ile masz prawidłowo zdefiniowany model. Jakbyś mimo wszystko miał problem, to pokaż kawałek kodu - będzie łatwiej podać konkrety.
mam coś takiego:
require ‘date’
datew = Date.new(2005,03,03)
datew.to_s
puts datew
datez = Date.new(2006,06,23)
datez.to_s
puts datez
x = datez - datew
puts x
generalnie mi odejmuje daty ale nie wiem jak mam zrobić aby użytkownik mógł podawać te daty z klawiatury (np. x = gets) i te dane następnie podstawiane byłyby do kodu
x_year = gets.chomp
x_month = gets.chomp
x_day = gets.chomp
Date.new(x_year, x_month, x_day)
Chyba o coś takiego Ci chodziło, prawda?
wyszło mi tak:
system ‘cls’
require ‘date’
q = 1
puts “Obliczanie kwoty odsetek za opóźnienie w zapłacie”
loop do
print "Podaj kwotę (należność główna) >> "
kwota = gets.to_f
print "Podaj datę wymagalności roszczenia (rok) >> "
x_year = gets.to_i
print "Podaj datę wymagalności roszczenia (miesiąc) >> "
x_month = gets.to_i
print "Podaj datę wymagalności roszczenia (dzień) >> "
x_day = gets.to_i
print "Podaj datę zapłaty roszczenia (rok) >> "
y_year = gets.to_i
print "Podaj datę zapłaty roszczenia (miesiąc) >> "
y_month = gets.to_i
print "Podaj datę zapłaty zoszczenia (dzień) >> "
y_day = gets.to_i
z = Date.new(y_year, y_month, y_day) - Date.new(x_year, x_month, x_day)
wynik = (0.08/365) * kwota * z
puts "Odsetki za opóźnienie od kwoty #{kwota} zł przy #{z.to_i} dniach opóźnienia w zapłacie wynoszą #{'%.2f' % wynik} zł"
print "Czy potrzebne są dalsze obliczenia ? <1 - tak /0 - nie> "
q = gets
break if q=0
system 'cls'
end
puts “******************************”
puts “Dziękuję”.center(30)
puts “******************************”
Dziękuję bardzo za pomoc. Wyliczenie odsetek nie jest prawidłowe (od 01.01.2016 wysokość odsetek uległa zmianie) ale chodziło mi tylko o wstępne przetestowanie samych mechanizmów.
Zastanawiam się czy jest możliwość podawania pełnej daty za jednym odwołaniem do gets np. 03.04.2016 lub 15/03/2016
Tak, można - wczytujesz jako string, następnie go parsujesz:
http://ruby-doc.org/core-2.1.0/String.html
czyli:
- pobierasz stringa z klawiatyury w ustalonym formacie (np dd/mm/rrrr)
- wydobywasz z niego co potrzebujesz wrzucając do obiektu klasy Date (Date.new()).
- robisz tak dla drugiego
- odejmujesz je
- działa!
Da się, trzeba tylko ustalić w jakim formacie data będzie podawana
wielkie dzięki - o to chodziło
pozdrawiam
Dziękuję bardzo za pomoc - cel zaliczony
niniejszym zamykam wątek - a tak przy okazji mam potwierdzenie że to forum działa i można na Was liczyć:)