學習程序中遇到了一個問題,首先定義了一個一位浮點數a = 1.5,我想把他擴大十倍,之后再縮小十倍
如下圖,第一次a回傳不了原來的值了

然后我又想到了下面的方法,不知道對不對

但問題是雖然和原來a的值大小相等,但是不是一位浮點數了呀,和原來不一樣了,變成1.500000000了,怎么才能轉化成和原來一樣的1.5呀?(這個a是要存在單片機里的)
uj5u.com熱心網友回復:
這個恐怕和printf的%f 格式有關,好像默認小數6位, 我看就是 1.5uj5u.com熱心網友回復:
人家系統輸出了5個0,你自己在正文敲了8個0,可見你自己也認為末尾多幾個少幾個0沒關系。uj5u.com熱心網友回復:
所以你得表達清楚,你關心的到底是值還是格式?uj5u.com熱心網友回復:
#include <stdio.h>
int main()
{
float a=1.5;
printf("first a=%f\n",a);//原來的
int a_10;
a_10 = (int)(a*10);
printf("a_10=%d\n",a_10);
a = a_10/10.0;
printf("second a=%f\n",a);//現在的
return 0;
}
//first a=1.500000
//a_10=15
//second a=1.500000
//請按任意鍵繼續. . .
uj5u.com熱心網友回復:
這里涉及到浮點型與整數型何時進行轉換的問題。式子a= a_10/10; a為浮點型,a_10為整數型
為了方便講,把式子變成 a = a_10/10 + 3;
這時就出現問題了 是該把a_10直接轉為浮點型然后進行 除10 加 3 的運算,(整數除法運算不保留余數,這是與浮點型運算的區別,這個會影響到最后結果)
還是a_10/10 運算完后 轉為浮點型然后加3,
或者說a_10/10 + 3 全部運算完后在轉呢。
實際上編譯器是根據給的數字 10 或 10.0 , 3 或3.0進行運算區分
整數與整數運算 a_10/10 ,a_10/10 + 3 還是按照整數運算方式進行
整數與浮點運算a_10/10.0 就會先把 a_10 轉為浮點型在 與10.0運算。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/260731.html
標籤:C語言
上一篇:關于gets()函式的回傳值
