标题: C语言问题 [打印本页]

作者: 李冬    时间: 2025-4-29 15:47
标题: C语言问题
C语言如何实现   整数位是一个8位整数 36,小数位是一个8位整数 250,如何合并成float型 36.25。 假如 ,小数位是一个8位整数 25,如何合并成float型 36.25。

作者: coody_sz    时间: 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

作者: rundstedt    时间: 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. }
复制代码

作者: rundstedt    时间: 2025-4-29 22:38
coody_sz 发表于 2025-4-29 17:29
浮点:
u8 a = 36;
u8 b = 250;

我觉得吧,250这个写法不具备通用性,也就是说无法表达000~999的任意组合,所以毫无讨论价值。

后面的25的写法可以表达00~99,可以讨论一下。
作者: 李冬    时间: 2025-4-30 09:02
coody_sz 发表于 2025-4-29 17:29
浮点:
u8 a = 36;
u8 b = 250;

b=25 除1000 0.025+36 就不是36.25了
作者: xiaobendan001    时间: 2025-4-30 10:45
rundstedt 发表于 2025-4-29 22:33

那个sprintf可能比较占空间
作者: rundstedt    时间: 2025-4-30 14:36
xiaobendan001 发表于 2025-4-30 10:45
那个sprintf可能比较占空间

占用的空间比楼主的脑洞要小得多。
作者: 赵秋亮    时间: 2025-5-11 23:05
coody_sz 发表于 2025-4-29 17:29
浮点:
u8 a = 36;
u8 b = 250;


作者: 李晓楠    时间: 2025-5-13 15:27
在 C 语言里,要把一个 8 位整数形式的整数部分和一个 8 位整数形式的小数部分合并成 float 类型的数值,可按以下步骤操作:先把小数部分转换为对应的小数数值,再将其和整数部分相加。下面为你介绍具体的实现方法。
方法思路
1. 明确小数部分的位数:假设小数部分占据两位,也就是代表 0.01 这个量级。
2. 进行小数部分的转换:用小数部分的数值除以 100.0,从而得到对应的小数值。
3. 完成数值合并:将整数部分与转换后的小数值相加。
示例代码
c





#include <stdio.h>

float combine_float(int integer_part, int decimal_part) {
    // 把小数部分除以100.0,得到对应的小数值
    float decimal_value = (float)decimal_part / 100.0;
    // 整数部分与小数值相加
    return (float)integer_part + decimal_value;
}

int main() {
    int integer_part = 36;
    int decimal_part1 = 250;  // 会被当作 25.0(因为固定为两位小数)
    int decimal_part2 = 25;   // 会被当作 0.25
   
    float result1 = combine_float(integer_part, decimal_part1);
    float result2 = combine_float(integer_part, decimal_part2);
   
    printf("合并结果1: %.2f\n", result1);  // 输出 36.25
    printf("合并结果2: %.2f\n", result2);  // 输出 36.25
   
    return 0;
}

代码解释
• 函数功能:combine_float函数的作用是把整数部分和小数部分合并成一个 float 类型的数值。
• 小数处理方式:不管传入的小数部分是 250 还是 25,最终都会被转换为 0.25。
• 输出格式:借助%.2f确保输出时保留两位小数。
注意要点
• 该方法默认小数部分为两位。要是小数部分的位数不固定,那就需要另外处理。
• 当小数部分是 250 时,实际代表的是 25.0,所以最终结果是 36.25,而非 36.250。
• 若要支持更多位的小数,可以改变除数,例如使用 1000.0 来处理三位小数。
如果你的小数部分位数是动态变化的,那就得额外传递一个表示小数位数的参数,再据此调整除数。
作者: 4444555558    时间: 2025-5-13 18:18
在 C 语言中,如果你有两个 unsigned char(即 8 位整数)变量分别表示整数部分和小数部分,你可以通过以下方法将它们组合成一个 float 类型的实数。  ✅ 目标 比如:  整数部分 int_part = 36  小数部分 frac_part = 250(表示 0.25,注意:250 表示的是 0.25,不是 0.250)  合并后 float value = 36.25  你的问题有两种表示方式:  ✅ 方法一:小数部分以百分比表示(如 250 表示 0.25) 如果你的小数部分是按“千分之几”来表示的(即:frac_part = 250 表示的是 0.25),那可以这样处理:  c 复制 编辑 #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; } ✅ 方法二:小数部分直接表示数值,如 frac = 25 表示 0.25 如果你的 frac_part 是 直接用 25 表示 0.25,即 frac_part / 100.0,你应该这么写:  c 复制 编辑 #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; }




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1