保留12位小数的浮点数

GitHub跳转原题关系图返回列表

读入 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;
}