鱼C论坛

 找回密码
 立即注册
查看: 1147|回复: 19

[已解决]浮點數打印與型態轉換問題

[复制链接]
发表于 2021-12-5 13:09:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 一隻太平洋睡鯊 于 2021-12-5 13:13 编辑

1.
#include <stdio.h>

int main()
{
    int x = 100 ; 
    float y = 100.001 ;
    float a = (float)x ; 
    int b = (int)y ; 
    printf("%d\n", x) ; 
    printf("%6.3f\n", y) ; 
    printf("%6.3f\n", a) ;
    printf("%d\n", b) ; 
    return 0 ; 
}
這是我在讀的教材中的範例
我想知道%6.3f中"6.3"的涵義
是不是指總共6個位數,並且小數點後面3個位數?
(試了%f和%6f會打印出100.000999,但如果%6.2f會打印出100.00)

2.
已有變數可以型態轉換嗎?
這個章節是型態轉換,但是比如
    int x = 100 ; 
    float y = 100.001 ;
    float x = (float)x ; 
    int y = (int)y ; 
是不行的,是不是要用其他的語法或代碼?
最佳答案
2021-12-5 19:53:16
一隻太平洋睡鯊 发表于 2021-12-5 19:38
這樣啊!
那麼"%6.3f"和"%7.3f"如果都能夠打印一樣的內容,那6、7數字的意義究竟...?
剛剛試了一下,前 ...

#include <bits/stdc++.h>
using namespace std;

int main(){
        float a = 12.34; // 当长度小于 7 时
        printf("%6.3f\n", a); // 明显看出差别
        printf("%7.3f\n", a); // 明显看出差别
        
        float b = 12345.678; // 当长度超于 7 时
        printf("%6.3f\n", b); // 没有差别
        printf("%7.3f\n", b); // 没有差别
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-5 13:21:38 | 显示全部楼层

回帖奖励 +1 鱼币

%6.2f 确实只是打印 100.00 啊(只保留小数点后 2 位,不是吗?)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-5 13:24:53 | 显示全部楼层
本帖最后由 傻眼貓咪 于 2021-12-5 13:32 编辑

%6.2f 表示总长为 6 位,小数点后保留 2 位

100.001 = 100.00 (包括小点,长度共 6 位)
12.34 = 空格 12.34 (包括空格+小点,长度共 6 位)

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
一隻太平洋睡鯊 + 1 + 1 + 1 感謝回覆~

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-5 19:15:27 | 显示全部楼层
傻眼貓咪 发表于 2021-12-5 13:24
%6.2f 表示总长为 6 位,小数点后保留 2 位

100.001 = 100.00 (包括小点,长度共 6 位)

那麼
100.001
不是等於有7位?(那不會變成7.3...?

12.34 = 空格 12.34 (包括空格+小点,长度共 6 位)
??? 空格...?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-5 19:18:42 | 显示全部楼层
一隻太平洋睡鯊 发表于 2021-12-5 19:15
那麼
100.001
不是等於有7位?(那不會變成7.3...?

你可以试试:
#include <bits/stdc++.h>
using namespace std;

int main(){
        double a = 123.45;
        printf("%20.1lf", a); // 这里故意放 20位
}

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
一隻太平洋睡鯊 + 1 + 1 + 1 感謝回覆~

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-5 19:22:49 | 显示全部楼层
一隻太平洋睡鯊 发表于 2021-12-5 19:15
那麼
100.001
不是等於有7位?(那不會變成7.3...?

如果你想全部 100.001 都打印出来,确实应该放 %7.3f

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
一隻太平洋睡鯊 + 1 + 1 + 1 感謝回覆~

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-5 19:38:21 | 显示全部楼层
傻眼貓咪 发表于 2021-12-5 19:22
如果你想全部 100.001 都打印出来,确实应该放 %7.3f

這樣啊!
那麼"%6.3f"和"%7.3f"如果都能夠打印一樣的內容,那6、7數字的意義究竟...?
剛剛試了一下,前面放0~5,都打印出一模一樣的東西,這樣不是好像只有".3"具有意義?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-5 19:48:47 | 显示全部楼层
一隻太平洋睡鯊 发表于 2021-12-5 19:38
這樣啊!
那麼"%6.3f"和"%7.3f"如果都能夠打印一樣的內容,那6、7數字的意義究竟...?
剛剛試了一下,前 ...

因为其实%7.3f有两个部分 7.3f 部分,其真正构造是 %[flags][width][.precision][length]specifier
width 表示打印总长度
precision 表示打印小数点后几位

注:7 和 .3f 不同意思

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
一隻太平洋睡鯊 + 1 + 1 + 1 感謝回覆!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-5 19:53:16 | 显示全部楼层    本楼为最佳答案   
一隻太平洋睡鯊 发表于 2021-12-5 19:38
這樣啊!
那麼"%6.3f"和"%7.3f"如果都能夠打印一樣的內容,那6、7數字的意義究竟...?
剛剛試了一下,前 ...

#include <bits/stdc++.h>
using namespace std;

int main(){
        float a = 12.34; // 当长度小于 7 时
        printf("%6.3f\n", a); // 明显看出差别
        printf("%7.3f\n", a); // 明显看出差别
        
        float b = 12345.678; // 当长度超于 7 时
        printf("%6.3f\n", b); // 没有差别
        printf("%7.3f\n", b); // 没有差别
}

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
一隻太平洋睡鯊 + 1 + 1 + 1 原來如此!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-12-5 19:58:21 | 显示全部楼层
傻眼貓咪 发表于 2021-12-5 19:48
因为其实%7.3f有两个部分 7 和 .3f 部分,其真正构造是 %[flags][width][.precision][length]specifier
...

%[flags][width][.precision][length]specifier
原來%後面可以放這麼多東西
f應該是specifier吧
那如果.3前面是7的時候,7就是裡面的[width]
但前面是7以下的數目時,是不是就變成不是代表[width]?
而是...[flags]?(我現在還沒學到這是啥...

另外第二個問題呢,同一個變數的型態轉換的問題
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-5 20:03:27 | 显示全部楼层
一隻太平洋睡鯊 发表于 2021-12-5 19:58
%[flags][width][.precision][length]specifier
原來%後面可以放這麼多東西
f應該是specifier吧

可以放很多东西,主要是看你想打印什么样子,全部可以自定义
关于 flags 也可以是空格 或 + 或 - 或 # 或 0,你可以试试网络查找关于 printf(),有很详细关于这点说明

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
一隻太平洋睡鯊 + 1 + 1 + 1 了解!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-5 20:06:02 | 显示全部楼层
一隻太平洋睡鯊 发表于 2021-12-5 19:58
%[flags][width][.precision][length]specifier
原來%後面可以放這麼多東西
f應該是specifier吧

关于 flags
关于 flags.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-12-5 20:15:55 | 显示全部楼层

回帖奖励 +1 鱼币

学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-5 20:30:57 | 显示全部楼层

那單一變數型態轉換的問題呢?
還是這個我以後會學到?(我現在才剛開始學一些,看的一本書[C語言入門精要],剛開始真的好多問題...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-5 20:43:57 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-5 21:13:35 | 显示全部楼层
一隻太平洋睡鯊 发表于 2021-12-5 20:30
那單一變數型態轉換的問題呢?
還是這個我以後會學到?(我現在才剛開始學一些,看的一本書[C語言入門精 ...

不明白,什么问题?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-5 21:43:28 | 显示全部楼层
傻眼貓咪 发表于 2021-12-5 21:13
不明白,什么问题?

已有變數可以型態轉換嗎?
這個章節是型態轉換,但是比如\
    int x = 100 ;
    float y = 100.001 ;
    float x = (float)x ;
    int y = (int)y ;
是不行的,是不是要用其他的語法或代碼?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-5 22:03:02 | 显示全部楼层
一隻太平洋睡鯊 发表于 2021-12-5 21:43
已有變數可以型態轉換嗎?
這個章節是型態轉換,但是比如\

不能重复定义变量,只能重新命名新变量,如:
#include <stdio.h>

int main(){
        int a = 3;
        float b = (float)a; // 当转换成其它类型时,请确保数据不会流失
        char c = (char)a; // 当转换成其它类型时,请确保数据不会流失
        return 0;
}

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
一隻太平洋睡鯊 + 1 + 1 + 1 感謝回覆!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-6 21:01:27 | 显示全部楼层
傻眼貓咪 发表于 2021-12-5 22:03
不能重复定义变量,只能重新命名新变量,如:

這樣啊!所以C語言不能改變既有變量的型態,說起來
我怎麼記得好像python是可以改變變量型態的?
關於這個你知道嗎?搞不好是我記錯了...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-6 21:12:08 | 显示全部楼层
一隻太平洋睡鯊 发表于 2021-12-6 21:01
這樣啊!所以C語言不能改變既有變量的型態,說起來
我怎麼記得好像python是可以改變變量型態的?
關於 ...

没错,Python 对象类型没有固定的,随时可以改变。所以相对 Python 在执行代码速度上不如 C/C++ 快,每个程序语言都有各自的利弊。

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
一隻太平洋睡鯊 + 1 + 1 + 1 原來如此!了解了~~

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-23 05:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表