#include <iostream>
#include <iomanip>
int main() {
//default
// std::cout<<"default========================================"<<std::endl;
// std::cout<<123.1<<std::endl; // 123.1
// std::cout<<123.12<<std::endl; // 123.12
// std::cout<<123.123<<std::endl; // 123.123
// std::cout<<123.1234<<std::endl; // 123.123
// std::cout<<123.12345<<std::endl; // 123.123
// std::cout<<123.123456<<std::endl; // 123.123
// std::cout<<123.1234567<<std::endl; // 123.123
// std::cout<<123.12345678<<std::endl; // 123.123
// std::cout<<123.123456789<<std::endl; // 123.123
// std::cout<<123.1234567891<<std::endl; // 123.123
// std::cout<<"fixed========================================"<<std::endl;
// std::cout<<std::fixed<<123<<std::endl;//123
// std::cout<<std::fixed<<123.0<<std::endl;//123.000000
// std::cout<<std::fixed<<123.1<<std::endl; // 123.100000
// std::cout<<std::fixed<<123.12<<std::endl; // 123.120000
// std::cout<<std::fixed<<123.123<<std::endl; // 123.123000
// std::cout<<std::fixed<<123.1234<<std::endl; // 123.123400
// std::cout<<std::fixed<<123.12345<<std::endl; // 123.123450
// std::cout<<std::fixed<<123.123456<<std::endl; // 123.123456
// std::cout<<std::fixed<<123.1234567<<std::endl; // 123.123457
// std::cout<<std::fixed<<123.12345678<<std::endl; // 123.123457
// std::cout<<std::fixed<<123.123456789<<std::endl; // 123.123457
// std::cout<<std::fixed<<123.1234567891<<std::endl; // 123.123457
// std::cout<<"setprecision()========================================"<<std::endl;
// std::cout<<std::setprecision(5)<<123.1<<std::endl; // 123.1
// std::cout<<std::setprecision(5)<<123.12<<std::endl; // 123.12
// std::cout<<std::setprecision(5)<<123.123<<std::endl; // 123.12
// std::cout<<std::setprecision(5)<<123.1234<<std::endl; // 123.12
// std::cout<<std::setprecision(5)<<123.12345<<std::endl; // 123.12
// std::cout<<std::setprecision(5)<<123.123456<<std::endl; // 123.12
// std::cout<<std::setprecision(5)<<123.1234567<<std::endl; // 123.12
// std::cout<<std::setprecision(5)<<123.12345678<<std::endl; // 123.12
// std::cout<<std::setprecision(5)<<123.123456789<<std::endl; // 123.12
// std::cout<<std::setprecision(5)<<123.1234567891<<std::endl; // 123.12
// std::cout<<std::setprecision(8)<<123.1<<std::endl; // 123.1
// std::cout<<std::setprecision(8)<<123.12<<std::endl; // 123.12
// std::cout<<std::setprecision(8)<<123.123<<std::endl; // 123.123
// std::cout<<std::setprecision(8)<<123.1234<<std::endl; // 123.1234
// std::cout<<std::setprecision(8)<<123.12345<<std::endl; // 123.12345
// std::cout<<std::setprecision(8)<<123.123456<<std::endl; // 123.12346
// std::cout<<std::setprecision(8)<<123.1234567<<std::endl; // 123.12346
// std::cout<<std::setprecision(8)<<123.12345678<<std::endl; // 123.12346
// std::cout<<std::setprecision(8)<<123.123456789<<std::endl; // 123.12346
// std::cout<<std::setprecision(8)<<123.1234567891<<std::endl; // 123.12346
//default
// std::cout<<123<<std::endl; // 123
// std::cout<<123456<<std::endl; // 123456
// std::cout<<123456789<<std::endl; // 123456789
// std::cout<<123.0<<std::endl; // 123
// std::cout<<123.1<<std::endl; // 123.1
// std::cout<<123456.1<<std::endl; // 123456
// std::cout<<123456789.1<<std::endl; // 1.23457e+08
// std::cout<<123.123456789<<std::endl; // 123.123
// std::cout<<123456.123456789<<std::endl; // 123456
// std::cout<<123456789.123456789<<std::endl; // 1.23457e+08
//fixed
// std::cout<<std::fixed<<123<<std::endl; // 123
// std::cout<<std::fixed<<123456<<std::endl; // 123456
// std::cout<<std::fixed<<123456789<<std::endl; // 123456789
// std::cout<<std::fixed<<123.0<<std::endl; // 123.000000
// std::cout<<std::fixed<<123.1<<std::endl; // 123.100000
// std::cout<<std::fixed<<123456.1<<std::endl; // 123456.100000
// std::cout<<std::fixed<<123456789.1<<std::endl; // 123456789.100000
// std::cout<<std::fixed<<123.123456789<<std::endl; // 123.123457
// std::cout<<std::fixed<<123456.123456789<<std::endl; // 123456.123457
// std::cout<<std::fixed<<123456789.123456789<<std::endl; // 123456789.123457
//setprecision(n)
// std::cout<<std::setprecision(8)<<123<<std::endl; // 123
// std::cout<<std::setprecision(8)<<123456<<std::endl; // 123456
// std::cout<<std::setprecision(8)<<123456789<<std::endl; // 123456789
// std::cout<<std::setprecision(8)<<123.0<<std::endl; // 123
// std::cout<<std::setprecision(8)<<123.1<<std::endl; // 123.1
// std::cout<<std::setprecision(8)<<12345678.1<<std::endl; // 12345678
// std::cout<<std::setprecision(8)<<123456789.1<<std::endl; // 1.2345679e+08
// std::cout<<std::setprecision(8)<<123.123456789<<std::endl; // 123.12346
// std::cout<<std::setprecision(8)<<123456.123456789<<std::endl; // 123456.12
// std::cout<<std::setprecision(8)<<123456789.123456789<<std::endl; // 1.2345679e+08
return 0;
}
/*
结论:
若输出整数,没有小数部分,则默认输出所有位数
以下是有小数部分的情况,
小数(有小数部分)的默认保留模式是保留有效数字,保留位数是6位
6位是从最高位开始的6位, 包括整数部分和小数部分
整数部分有效位数大于6位时会使用科学计数法输出, 科学计数法有效位数为6位,第6位四舍五入
整数部分有效位数小于等于6位时,不会使用科学计数法
整数部分完整输出后, 已输出的数字不足6位时
会输出小数部分的有效位数(尾部0不算有效位数),从最高位开始
若小数部分也不能补足6位, 则输出结束, 并不会在小数部分末尾以0来补足
std::fixed的影响会让保留的位数从有效数字变为小数点后数字, 会在小数部分末尾补0以补足位数
若不更改位数, 则位保留6位小数, 不足6位会在小数部分末尾补0补足6位
std::setprecision(x)会将保留的位数从6改为x然后再适用以上规则
*/