读入 double 后用 printf 的 %.12f 定点格式化:按二进制精确值四舍五入到 12 位小数并补零。
OJ: roj
题目 ID: 1025
难度:入门
标签:入门输入输出浮点数python
创建: 2026-09-29 13:52
更新: 2026-10-04 22:43
题目描述
读入一个双精度浮点数,保留 12 位小数输出。输入一行一个双精度浮点数,输出一行恰好 12 位小数的结果。样例输入 3.1415926535798932,样例输出 3.141592653580。
思路
用 scanf("%lf") 读入 double,再用 printf("%.12f") 输出。它按浮点数的精确二进制值四舍五入到 12 位小数,小数位不足自动补 0,负号也会保留;若改用 cout << x,小数位数与舍入都不可控。
参考代码
Python 版:
python
#!/usr/bin/env python3
# Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
# rbook: -> https://rbook.roj.ac.cn https://rbook2.roj.ac.cn
# rainboy的学习导航网站: https://idx.roj.ac.cn
# create_at: 2026-09-29 13:54
# update_at: 2026-10-04 14:12
import sys
def solve() -> None:
"""读入一个双精度浮点数,按 %.12f 四舍五入保留 12 位小数输出。"""
data = iter(map(float, sys.stdin.buffer.read().split()))
x = next(data) # IEEE-754 双精度,与 C++ 的 double 同一种类型
print(f"{x:.12f}") # 同时负责舍入与补零,尾随 0 不会被吃掉
if __name__ == "__main__":
solve()C++ 版(同一算法):
cpp
/**
* Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
* rbook: -> https://rbook.roj.ac.cn https://rbook2.roj.ac.cn
* rainboy的学习导航网站: https://idx.roj.ac.cn
* create_at: 2026-10-04 22:43
* update_at: 2026-10-04 22:43
*/
#include <cstdio>
double x; // 读入的双精度浮点数
int main() {
scanf("%lf", &x);
// %.12f 按 x 的精确二进制值四舍五入到 12 位小数,小数位不足自动补 0,负号自动保留
printf("%.12f\n", x);
return 0;
}