找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

C語言問題

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

使用道具 舉報

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

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

使用道具 舉報

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ù)

使用道具 舉報

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

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

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

使用道具 舉報

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

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

使用道具 舉報

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

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

使用道具 舉報

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

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

使用道具 舉報

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

回復(fù)

使用道具 舉報

ID:1150350 發(fā)表于 2025-5-13 15:27 | 顯示全部樓層
在 C 語言里,要把一個 8 位整數(shù)形式的整數(shù)部分和一個 8 位整數(shù)形式的小數(shù)部分合并成 float 類型的數(shù)值,可按以下步驟操作:先把小數(shù)部分轉(zhuǎn)換為對應(yīng)的小數(shù)數(shù)值,再將其和整數(shù)部分相加。下面為你介紹具體的實現(xiàn)方法。
方法思路
1. 明確小數(shù)部分的位數(shù):假設(shè)小數(shù)部分占據(jù)兩位,也就是代表 0.01 這個量級。
2. 進(jìn)行小數(shù)部分的轉(zhuǎn)換:用小數(shù)部分的數(shù)值除以 100.0,從而得到對應(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,得到對應(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;  // 會被當(dāng)作 25.0(因為固定為兩位小數(shù))
    int decimal_part2 = 25;   // 會被當(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ù)部分合并成一個 float 類型的數(shù)值。
• 小數(shù)處理方式:不管傳入的小數(shù)部分是 250 還是 25,最終都會被轉(zhuǎn)換為 0.25。
• 輸出格式:借助%.2f確保輸出時保留兩位小數(shù)。
注意要點
• 該方法默認(rèn)小數(shù)部分為兩位。要是小數(shù)部分的位數(shù)不固定,那就需要另外處理。
• 當(dāng)小數(shù)部分是 250 時,實際代表的是 25.0,所以最終結(jié)果是 36.25,而非 36.250。
• 若要支持更多位的小數(shù),可以改變除數(shù),例如使用 1000.0 來處理三位小數(shù)。
如果你的小數(shù)部分位數(shù)是動態(tài)變化的,那就得額外傳遞一個表示小數(shù)位數(shù)的參數(shù),再據(jù)此調(diào)整除數(shù)。
回復(fù)

使用道具 舉報

ID:1138534 發(fā)表于 2025-5-13 18:18 | 顯示全部樓層
在 C 語言中,如果你有兩個 unsigned char(即 8 位整數(shù))變量分別表示整數(shù)部分和小數(shù)部分,你可以通過以下方法將它們組合成一個 float 類型的實數(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ù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

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