找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

帖子
查看: 768|回復(fù): 9
收起左側(cè)

C語言問題

[復(fù)制鏈接]
ID:709761 發(fā)表于 2025-4-29 15:47 | 顯示全部樓層 |閱讀模式
C語言如何實(shí)現(xiàn)   整數(shù)位是一個(gè)8位整數(shù) 36,小數(shù)位是一個(gè)8位整數(shù) 250,如何合并成float型 36.25。 假如 ,小數(shù)位是一個(gè)8位整數(shù) 25,如何合并成float型 36.25。
回復(fù)

使用道具 舉報(bào)

ID:1034262 發(fā)表于 2025-4-29 17:29 | 顯示全部樓層
浮點(diǎn):
u8 a = 36;
u8 b = 250;
float f;
f = (float)a + (flaot)b/1000;

定點(diǎn),放大1000倍:
u8 a = 36;
u8 b = 250;
u32 f;
f = (u32)a *1000 + b;   //f值為36250,由于放大了1000倍,所以實(shí)際為36.250
回復(fù)

使用道具 舉報(bào)

ID:879809 發(fā)表于 2025-4-29 22:33 | 顯示全部樓層
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. /* run this program using the console pauser or add your own getch, system("pause") or input loop */

  4. int main(int argc, char *argv[]) {
  5.         volatile float f;
  6.     int i=36,j=25;
  7.     char ch[10];
  8.     sprintf(ch,"%d.%d",i,j);
  9.     f=atof(ch);
  10.         printf("\r\nk=%f",f);
  11.         return 0;
  12. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

ID:879809 發(fā)表于 2025-4-29 22:38 | 顯示全部樓層
coody_sz 發(fā)表于 2025-4-29 17:29
浮點(diǎn):
u8 a = 36;
u8 b = 250;

我覺得吧,250這個(gè)寫法不具備通用性,也就是說無法表達(dá)000~999的任意組合,所以毫無討論價(jià)值。

后面的25的寫法可以表達(dá)00~99,可以討論一下。
回復(fù)

使用道具 舉報(bào)

ID:709761 發(fā)表于 2025-4-30 09:02 | 顯示全部樓層
coody_sz 發(fā)表于 2025-4-29 17:29
浮點(diǎn):
u8 a = 36;
u8 b = 250;

b=25 除1000 0.025+36 就不是36.25了
回復(fù)

使用道具 舉報(bào)

ID:1109793 發(fā)表于 2025-4-30 10:45 | 顯示全部樓層

那個(gè)sprintf可能比較占空間
回復(fù)

使用道具 舉報(bào)

ID:879809 發(fā)表于 2025-4-30 14:36 | 顯示全部樓層
xiaobendan001 發(fā)表于 2025-4-30 10:45
那個(gè)sprintf可能比較占空間

占用的空間比樓主的腦洞要小得多。
回復(fù)

使用道具 舉報(bào)

ID:1150196 發(fā)表于 2025-5-11 23:05 | 顯示全部樓層
coody_sz 發(fā)表于 2025-4-29 17:29
浮點(diǎn):
u8 a = 36;
u8 b = 250;

回復(fù)

使用道具 舉報(bào)

ID:1150350 發(fā)表于 2025-5-13 15:27 | 顯示全部樓層
在 C 語言里,要把一個(gè) 8 位整數(shù)形式的整數(shù)部分和一個(gè) 8 位整數(shù)形式的小數(shù)部分合并成 float 類型的數(shù)值,可按以下步驟操作:先把小數(shù)部分轉(zhuǎn)換為對(duì)應(yīng)的小數(shù)數(shù)值,再將其和整數(shù)部分相加。下面為你介紹具體的實(shí)現(xiàn)方法。
方法思路
1. 明確小數(shù)部分的位數(shù):假設(shè)小數(shù)部分占據(jù)兩位,也就是代表 0.01 這個(gè)量級(jí)。
2. 進(jìn)行小數(shù)部分的轉(zhuǎn)換:用小數(shù)部分的數(shù)值除以 100.0,從而得到對(duì)應(yīng)的小數(shù)值。
3. 完成數(shù)值合并:將整數(shù)部分與轉(zhuǎn)換后的小數(shù)值相加。
示例代碼
c





#include <stdio.h>

float combine_float(int integer_part, int decimal_part) {
    // 把小數(shù)部分除以100.0,得到對(duì)應(yīng)的小數(shù)值
    float decimal_value = (float)decimal_part / 100.0;
    // 整數(shù)部分與小數(shù)值相加
    return (float)integer_part + decimal_value;
}

int main() {
    int integer_part = 36;
    int decimal_part1 = 250;  // 會(huì)被當(dāng)作 25.0(因?yàn)楣潭閮晌恍?shù))
    int decimal_part2 = 25;   // 會(huì)被當(dāng)作 0.25
   
    float result1 = combine_float(integer_part, decimal_part1);
    float result2 = combine_float(integer_part, decimal_part2);
   
    printf("合并結(jié)果1: %.2f\n", result1);  // 輸出 36.25
    printf("合并結(jié)果2: %.2f\n", result2);  // 輸出 36.25
   
    return 0;
}

代碼解釋
• 函數(shù)功能:combine_float函數(shù)的作用是把整數(shù)部分和小數(shù)部分合并成一個(gè) float 類型的數(shù)值。
• 小數(shù)處理方式:不管傳入的小數(shù)部分是 250 還是 25,最終都會(huì)被轉(zhuǎn)換為 0.25。
• 輸出格式:借助%.2f確保輸出時(shí)保留兩位小數(shù)。
注意要點(diǎn)
• 該方法默認(rèn)小數(shù)部分為兩位。要是小數(shù)部分的位數(shù)不固定,那就需要另外處理。
• 當(dāng)小數(shù)部分是 250 時(shí),實(shí)際代表的是 25.0,所以最終結(jié)果是 36.25,而非 36.250。
• 若要支持更多位的小數(shù),可以改變除數(shù),例如使用 1000.0 來處理三位小數(shù)。
如果你的小數(shù)部分位數(shù)是動(dòng)態(tài)變化的,那就得額外傳遞一個(gè)表示小數(shù)位數(shù)的參數(shù),再據(jù)此調(diào)整除數(shù)。
回復(fù)

使用道具 舉報(bào)

ID:1138534 發(fā)表于 2025-5-13 18:18 | 顯示全部樓層
在 C 語言中,如果你有兩個(gè) unsigned char(即 8 位整數(shù))變量分別表示整數(shù)部分和小數(shù)部分,你可以通過以下方法將它們組合成一個(gè) float 類型的實(shí)數(shù)。  ✅ 目標(biāo) 比如:  整數(shù)部分 int_part = 36  小數(shù)部分 frac_part = 250(表示 0.25,注意:250 表示的是 0.25,不是 0.250)  合并后 float value = 36.25  你的問題有兩種表示方式:  ✅ 方法一:小數(shù)部分以百分比表示(如 250 表示 0.25) 如果你的小數(shù)部分是按“千分之幾”來表示的(即:frac_part = 250 表示的是 0.25),那可以這樣處理:  c 復(fù)制 編輯 #include <stdio.h>  int main() {     unsigned char int_part = 36;     unsigned char frac_part = 250;  // 表示 0.25(即 frac_part / 1000.0)      float result = int_part + frac_part / 1000.0;      printf("Result = %f\n", result);  // 輸出 36.250     return 0; } ✅ 方法二:小數(shù)部分直接表示數(shù)值,如 frac = 25 表示 0.25 如果你的 frac_part 是 直接用 25 表示 0.25,即 frac_part / 100.0,你應(yīng)該這么寫:  c 復(fù)制 編輯 #include <stdio.h>  int main() {     unsigned char int_part = 36;     unsigned char frac_part = 25;  // 表示 0.25      float result = int_part + frac_part / 100.0;      printf("Result = %f\n", result);  // 輸出 36.25     return 0; }
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表