Namespaces
Variants

std::chrono:: floor (std::chrono::duration)

From cppreference.net
Défini dans l'en-tête <chrono>
template < class ToDuration, class Rep, class Period >
constexpr ToDuration floor ( const std:: chrono :: duration < Rep, Period > & d ) ;
(depuis C++17)

Retourne la plus grande durée t représentable dans ToDuration qui est inférieure ou égale à d .

La fonction ne participe pas à la résolution de surcharge sauf si ToDuration est une spécialisation de std::chrono::duration .

Table des matières

Paramètres

d - durée à convertir

Valeur de retour

d arrondi vers le bas à une durée de type ToDuration .

Implémentation possible

namespace detail
{
    template<class> inline constexpr bool is_duration_v = false;
    template<class Rep, class Period> inline constexpr bool is_duration_v<
        std::chrono::duration<Rep, Period>> = true;
}
template<class To, class Rep, class Period,
         class = std::enable_if_t<detail::is_duration_v<To>>>
constexpr To floor(const duration<Rep, Period>& d)
{
    To t = std::chrono::duration_cast<To>(d);
    if (t > d)
        return t - To{1};
    return t;
}
**Note:** Le code C++ n'a pas été traduit conformément aux instructions, car il se trouve dans des balises `
` et contient des termes spécifiques au C++ qui doivent être préservés. Seul le texte environnant (s'il y en avait) aurait été traduit en français, mais dans ce cas, il n'y a que du code C++.

Exemple

#include <chrono>
#include <iomanip>
#include <iostream>
int main()
{
    using namespace std::chrono_literals;
    std::cout << "Duration\tFloor\tRound\tCeil\n";
    for (using Sec = std::chrono::seconds;
        auto const d : {+4999ms, +5000ms, +5001ms, +5499ms, +5500ms, +5999ms,
                        -4999ms, -5000ms, -5001ms, -5499ms, -5500ms, -5999ms})
        std::cout << std::showpos << d << "\t\t"
                  << std::chrono::floor<Sec>(d) << '\t'
                  << std::chrono::round<Sec>(d) << '\t'
                  << std::chrono::ceil <Sec>(d) << '\n';
}

Sortie :

Duration	Floor	Round	Ceil
+4999ms		+4s	+5s	+5s
+5000ms		+5s	+5s	+5s
+5001ms		+5s	+5s	+6s
+5499ms		+5s	+5s	+6s
+5500ms		+5s	+6s	+6s
+5999ms		+5s	+6s	+6s
-4999ms		-5s	-5s	-4s
-5000ms		-5s	-5s	-5s
-5001ms		-6s	-5s	-5s
-5499ms		-6s	-5s	-5s
-5500ms		-6s	-6s	-5s
-5999ms		-6s	-6s	-5s

Voir aussi

convertit une durée en une autre, avec un intervalle de graduation différent
(modèle de fonction)
convertit une durée en une autre, en arrondissant vers le haut
(modèle de fonction)
convertit une durée en une autre, en arrondissant au plus proche, les égalités vers le pair
(modèle de fonction)
convertit un time_point en un autre, en arrondissant vers le bas
(modèle de fonction)
(C++11) (C++11)
entier le plus proche non supérieur à la valeur donnée
(fonction)