最終更新日時: 2025年07月14日 23時04分00秒 (JST)
Koichi Murase が更新

履歴 編集

variable
<chrono>

# std::chrono::hh_mm_ss::fractional_width(C++20)

    namespace std::chrono {
      template <class Duration>
      class hh_mm_ss {
      public:
        static constexpr bool fractional_width = see below;
      };
    }

## 概要

`precision`型によって表現される小数の小数桁数。

この値は、`Duration`のすべての値を正確に表せるように、`[0, 18]`の範囲内で最小の整数値をもつ。そのような`fractional_width`が存在しない場合、値は6となる (`std::numeric_limits<float>::digits10`の値)。

`Duration`に指定する型によって`fractional_width`の値がどのように変わるかの表は以下となる：

`Duration` | `fractional_width`の値 | 小数点をもつ値のフォーマット出力
--- | --- | ---
`hours`, `minutes`, `seconds` | 0 |
`milliseconds` | 3 | 0.001
`microseconds` | 6 | 0.000001
`nanoseconds` | 9 | 0.000000001
`duration<int, ratio<1, 2>>` | 1 | 0.5
`duration<int, ratio<1, 3>>` | 6 | 0.333333
`duration<int, ratio<1, 4>>` | 2 | 0.25
`duration<int, ratio<1, 5>>` | 1 | 0.2
`duration<int, ratio<1, 6>>` | 6 | 0.166666
`duration<int, ratio<1, 7>>` | 6 | 0.142857
`duration<int, ratio<1, 8>>` | 3 | 0.125
`duration<int, ratio<1, 9>>` | 6 | 0.111111
`duration<int, ratio<1, 10>>` | 1 | 0.1
`duration<int, ratio<756, 625>>` | 4 | 0.2096

## 例

    #include <iostream>
    #include <chrono>

    namespace chrono = std::chrono;
    using namespace std::chrono_literals;

    int main() {
      std::cout << chrono::hh_mm_ss{0s} << std::endl;
      std::cout << chrono::hh_mm_ss{1ms} << std::endl;
      std::cout << chrono::hh_mm_ss{1ns} << std::endl;

      // 1/3秒単位
      std::cout << chrono::hh_mm_ss{chrono::duration<int, std::ratio<1, 3>>{1}} << std::endl;
    }

### 出力

    00:00:00
    00:00:00.001
    00:00:00.000000001
    00:00:00.333333

## バージョン

### 言語

- C++20

### 処理系

- Clang: 10.0 ✅
- GCC: 11.1 ✅
- Visual C++: 2019 Update 3 ❌