找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 858|回复: 9
打印 上一主题 下一主题
收起左侧

C语言问题

[复制链接]
跳转到指定楼层
楼主
ID:709761 发表于 2025-4-29 15:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C语言如何实现   整数位是一个8位整数 36,小数位是一个8位整数 250,如何合并成float型 36.25。 假如 ,小数位是一个8位整数 25,如何合并成float型 36.25。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1034262 发表于 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
回复

使用道具 举报

板凳
ID:879809 发表于 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. }
复制代码
回复

使用道具 举报

地板
ID:879809 发表于 2025-4-29 22:38 | 只看该作者
coody_sz 发表于 2025-4-29 17:29
浮点:
u8 a = 36;
u8 b = 250;

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

后面的25的写法可以表达00~99,可以讨论一下。
回复

使用道具 举报

5#
ID:709761 发表于 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了
回复

使用道具 举报

6#
ID:1109793 发表于 2025-4-30 10:45 | 只看该作者

那个sprintf可能比较占空间
回复

使用道具 举报

7#
ID:879809 发表于 2025-4-30 14:36 | 只看该作者
xiaobendan001 发表于 2025-4-30 10:45
那个sprintf可能比较占空间

占用的空间比楼主的脑洞要小得多。
回复

使用道具 举报

8#
ID:1150196 发表于 2025-5-11 23:05 | 只看该作者
coody_sz 发表于 2025-4-29 17:29
浮点:
u8 a = 36;
u8 b = 250;

回复

使用道具 举报

9#
ID:1150350 发表于 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 来处理三位小数。
如果你的小数部分位数是动态变化的,那就得额外传递一个表示小数位数的参数,再据此调整除数。
回复

使用道具 举报

10#
ID:1138534 发表于 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; }
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表