how c++ setprecision() manipulator work? : can someone explain why output of this code is:

    #include <iostream>
    #include <string>
    #include <iomanip>
    int main()
    {
      double y =123.456;
     std::cout << std::setiosflags(std::ios::left) << std::setfill('*') << std::setw(8) << std::setprecision(3) << y;
    }

out put is:

    123*****

 
