浮點數打印與型態轉換問題
本帖最后由 一隻太平洋睡鯊 于 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 ;
是不行的,是不是要用其他的語法或代碼?
%6.2f 确实只是打印 100.00 啊(只保留小数点后 2 位,不是吗?) 本帖最后由 傻眼貓咪 于 2021-12-5 13:32 编辑
%6.2f 表示总长为 6 位,小数点后保留 2 位
100.001 = 100.00 (包括小点,长度共 6 位)
12.34 = 空格 12.34 (包括空格+小点,长度共 6 位)
傻眼貓咪 发表于 2021-12-5 13:24
%6.2f 表示总长为 6 位,小数点后保留 2 位
100.001 = 100.00 (包括小点,长度共 6 位)
那麼
100.001
不是等於有7位?(那不會變成7.3...?
12.34 = 空格 12.34 (包括空格+小点,长度共 6 位)
??? 空格...?
一隻太平洋睡鯊 发表于 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位
} 一隻太平洋睡鯊 发表于 2021-12-5 19:15
那麼
100.001
不是等於有7位?(那不會變成7.3...?
如果你想全部 100.001 都打印出来,确实应该放 %7.3f 傻眼貓咪 发表于 2021-12-5 19:22
如果你想全部 100.001 都打印出来,确实应该放 %7.3f
這樣啊!
那麼"%6.3f"和"%7.3f"如果都能夠打印一樣的內容,那6、7數字的意義究竟...?
剛剛試了一下,前面放0~5,都打印出一模一樣的東西,這樣不是好像只有".3"具有意義? 一隻太平洋睡鯊 发表于 2021-12-5 19:38
這樣啊!
那麼"%6.3f"和"%7.3f"如果都能夠打印一樣的內容,那6、7數字的意義究竟...?
剛剛試了一下,前 ...
因为其实%7.3f有两个部分 7 和 .3f 部分,其真正构造是 %[width][.precision]specifier
width 表示打印总长度
precision 表示打印小数点后几位
注:7 和 .3f 不同意思 一隻太平洋睡鯊 发表于 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); // 没有差别
} 傻眼貓咪 发表于 2021-12-5 19:48
因为其实%7.3f有两个部分 7 和 .3f 部分,其真正构造是 %[.precision]specifier
...
%[.precision]specifier
原來%後面可以放這麼多東西
f應該是specifier吧
那如果.3前面是7的時候,7就是裡面的
但前面是7以下的數目時,是不是就變成不是代表?
而是...?(我現在還沒學到這是啥...
另外第二個問題呢,同一個變數的型態轉換的問題{:10_309:} 一隻太平洋睡鯊 发表于 2021-12-5 19:58
%[.precision]specifier
原來%後面可以放這麼多東西
f應該是specifier吧
可以放很多东西,主要是看你想打印什么样子,全部可以自定义
关于 flags 也可以是空格 或 + 或 - 或 # 或 0,你可以试试网络查找关于 printf(),有很详细关于这点说明 一隻太平洋睡鯊 发表于 2021-12-5 19:58
%[.precision]specifier
原來%後面可以放這麼多東西
f應該是specifier吧
关于 flags {:10_257:}{:10_257:}学习一下 傻眼貓咪 发表于 2021-12-5 20:06
关于 flags
那單一變數型態轉換的問題呢?
還是這個我以後會學到?(我現在才剛開始學一些,看的一本書,剛開始真的好多問題... {:10_254:} 一隻太平洋睡鯊 发表于 2021-12-5 20:30
那單一變數型態轉換的問題呢?
還是這個我以後會學到?(我現在才剛開始學一些,看的一本書
不明白,什么问题? 傻眼貓咪 发表于 2021-12-5 21:13
不明白,什么问题?
已有變數可以型態轉換嗎?
這個章節是型態轉換,但是比如\
int x = 100 ;
float y = 100.001 ;
float x = (float)x ;
int y = (int)y ;
是不行的,是不是要用其他的語法或代碼? 一隻太平洋睡鯊 发表于 2021-12-5 21:43
已有變數可以型態轉換嗎?
這個章節是型態轉換,但是比如\
不能重复定义变量,只能重新命名新变量,如:
#include <stdio.h>
int main(){
int a = 3;
float b = (float)a; // 当转换成其它类型时,请确保数据不会流失
char c = (char)a; // 当转换成其它类型时,请确保数据不会流失
return 0;
} 傻眼貓咪 发表于 2021-12-5 22:03
不能重复定义变量,只能重新命名新变量,如:
這樣啊!所以C語言不能改變既有變量的型態,說起來
我怎麼記得好像python是可以改變變量型態的?
關於這個你知道嗎?搞不好是我記錯了... 一隻太平洋睡鯊 发表于 2021-12-6 21:01
這樣啊!所以C語言不能改變既有變量的型態,說起來
我怎麼記得好像python是可以改變變量型態的?
關於 ...
没错,Python 对象类型没有固定的,随时可以改变。所以相对 Python 在执行代码速度上不如 C/C++ 快,每个程序语言都有各自的利弊。
页:
[1]