2016-06-20 1 views
-1

, пожалуйста, у меня возникли проблемы с решением функции о программе в Visual Fox Pro.Круглые минуты 20 в 20 в visual fox pro

Мне нужно сделать округление каждые 20 минут в десятичной системе. Например: если я получаю 19 минут (0,316), мне нужно вернуться 0 минут. , если я получу между 0-19 минутами, вернусь 0 минут , если я получу между 20-39 минутами, вернусь 20 минут , если я получу между 40-59 минутами, вернусь 40 минут , если я получу между 60-79 минутами, вернусь 60 минут

Я думал, что использует ROUND(), но я не знаю, как потому, что «раунд» приближается к ближайшему десятичному знаку.

благодарит заранее.

+0

употребляем, но если хотите раунд 500 минут ...? IIF (VAR1> 0, IIF (МЕЖДУ (VAR1,0,0.3166), 0, IIF (МЕЖДУ (VAR1), 0.3333,0.8166), 0.3333,0)), 0) –

ответ

1
roundedMinutes = Floor(m.myMinute/20) * 20 

Например:

Create Cursor SampleMin (minutes i, rounded i) 
Local ix 
For ix = 1 To 600 
    Insert Into SampleMin ; 
     (minutes, rounded) ; 
     values ; 
     (m.ix, Floor(m.ix/20) * 20) 
Endfor 

Locate 
Browse 
+0

Ваш ответ отлично работает, большое спасибо. очень простой –

0

Вот небольшой прг, который я сделал, который, мы надеемся, поможет вам или, по крайней мере, начнет вас в правильном направлении.

lnStart    = 0 
lnEnd    = 20 
lnReceivedMinutes = 500 
llNotDone   = .T. 

IF lnReceivedMinutes > 0 
    DO WHILE llNotDone 
     IF BETWEEN(lnReceivedMinutes, lnStart, lnEnd) 
      llNotDone = .F. 
      MESSAGEBOX(ALLTRIM(STR(lnStart)) + " Minutes") 
     ELSE 
      lnStart = lnStart + 20 
      lnEnd = lnEnd + 20 
     ENDIF 
    ENDDO 
ENDIF 

я проверить, если значение, полученное между моей lnStart и lnEnd. Если это не так, я проверю следующие 20 минут.

+0

Большое вам спасибо! Работайте отлично –

0

Четин Basoz дал правильный ответ

roundedMinutes = Floor(m.myMinute/20) * 20 

Я проверил себя