计算一个单精度浮点数的整数位个数,和小数位个数

2024-01-24 23:18

本文主要是介绍计算一个单精度浮点数的整数位个数,和小数位个数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

代码贴上,以作记录

/*

 * 返回一个单精度浮点数的整数位个数,和小数位个数(10进制)
*/
//    float a=0.78911115;
//    uint8_t b,c;
//    decodefloat(a,&b,&c);
//    a=0.7891111;
//    decodefloat(a,&b,&c);
//    a=0.789111;
//    decodefloat(a,&b,&c);
//    a=0.78911;
//    decodefloat(a,&b,&c);
//    a=0.7891;
//    decodefloat(a,&b,&c);
//    a=0.789;
//    decodefloat(a,&b,&c);
//    a=0.78;
//    decodefloat(a,&b,&c);
//    a=0.7;
//    decodefloat(a,&b,&c);
//    a=1.0;
//    decodefloat(a,&b,&c);
//    a=12.0;
//    decodefloat(a,&b,&c);
//    a=123.0;
//    decodefloat(a,&b,&c);
//    a=0.0;
//    decodefloat(a,&b,&c);
void DecodeFloat(float data,uint8_t *intcount,uint8_t *pointcount)
{
    int8_t i;
    int32_t a=data;
    float b=0;
    char temp[16]={0};
    if(data==0)
    {
        *intcount   = 1;
        *pointcount = 0;
    }
    if(a==0)
    {
        *intcount =1;
    }
    else
    {
        for(i=0;a!=0;i++)
        {
            a/=10;
        }
        *intcount =i;
    }
/***********此代码输出小数位数恒等于7*****************/
//    STM32 平台上单精度小数点后面精度最多达到小数点后7位,双精度16位
//    a=data;
//    b=data-a;
//    for(i=0;b!=0;i++)//注意死循环
//    {
//        b*=10.0;
//        a=b;
//        b=a-b;
//    }
//    *pointcount =i;
/***********此代码输出小数位数恒等于7*****************/
    a=data;
    b=data-a;
    sprintf(temp,"%.7f",b);//单精度10进制最多7位小数
    //printf("%s\r\n",temp);
    for(i=15;i>1;i--)//0、1两位固定是“0.”
    {
        if(temp[i]!=0)
        {
            if(temp[i]=='0'&&temp[i-1]!='0')
            {
                temp[i]=0;
                break;
            }
        }
    }
    if(i==1)//没有找到有‘0’,说明就是7位,包括7位以上的小数,只取7位
        *pointcount = 7;
    else
        *pointcount = i-2;//减去固定的两位“0.”
//    printf("整数个数:%d\r\n",*intcount);
//    printf("小数个数:%d\r\n",*pointcount);

}


双精度的把参数类型修改为double型,“%.7f”修改为“%.16f”,再把temp的长度加长到32位就可以进行判断了

这篇关于计算一个单精度浮点数的整数位个数,和小数位个数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/641336

相关文章

Python实现精确小数计算的完全指南

《Python实现精确小数计算的完全指南》在金融计算、科学实验和工程领域,浮点数精度问题一直是开发者面临的重大挑战,本文将深入解析Python精确小数计算技术体系,感兴趣的小伙伴可以了解一下... 目录引言:小数精度问题的核心挑战一、浮点数精度问题分析1.1 浮点数精度陷阱1.2 浮点数误差来源二、基础解决

Python文本相似度计算的方法大全

《Python文本相似度计算的方法大全》文本相似度是指两个文本在内容、结构或语义上的相近程度,通常用0到1之间的数值表示,0表示完全不同,1表示完全相同,本文将深入解析多种文本相似度计算方法,帮助您选... 目录前言什么是文本相似度?1. Levenshtein 距离(编辑距离)核心公式实现示例2. Jac

Python中经纬度距离计算的实现方式

《Python中经纬度距离计算的实现方式》文章介绍Python中计算经纬度距离的方法及中国加密坐标系转换工具,主要方法包括geopy(Vincenty/Karney)、Haversine、pyproj... 目录一、基本方法1. 使用geopy库(推荐)2. 手动实现 Haversine 公式3. 使用py

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

Java计算经纬度距离的示例代码

《Java计算经纬度距离的示例代码》在Java中计算两个经纬度之间的距离,可以使用多种方法(代码示例均返回米为单位),文中整理了常用的5种方法,感兴趣的小伙伴可以了解一下... 目录1. Haversine公式(中等精度,推荐通用场景)2. 球面余弦定理(简单但精度较低)3. Vincenty公式(高精度,

windows和Linux使用命令行计算文件的MD5值

《windows和Linux使用命令行计算文件的MD5值》在Windows和Linux系统中,您可以使用命令行(终端或命令提示符)来计算文件的MD5值,文章介绍了在Windows和Linux/macO... 目录在Windows上:在linux或MACOS上:总结在Windows上:可以使用certuti

使用C语言实现交换整数的奇数位和偶数位

《使用C语言实现交换整数的奇数位和偶数位》在C语言中,要交换一个整数的二进制位中的奇数位和偶数位,重点需要理解位操作,当我们谈论二进制位的奇数位和偶数位时,我们是指从右到左数的位置,本文给大家介绍了使... 目录一、问题描述二、解决思路三、函数实现四、宏实现五、总结一、问题描述使用C语言代码实现:将一个整

C语言中的浮点数存储详解

《C语言中的浮点数存储详解》:本文主要介绍C语言中的浮点数存储详解,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、首先明确一个概念2、接下来,讲解C语言中浮点型数存储的规则2.1、可以将上述公式分为两部分来看2.2、问:十进制小数0.5该如何存储?2.3 浮点

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如