C,C++,C#小数点有关问题,取消小数点如何用代码实现?

问题遇到的现象和发生背景

C,C++,C#小数点有关问题

问题相关代码,请勿粘贴截图

float型数取消小数点成为整数,再乘以 10,再转16 位二进制补码
例如:72.8 取消小数点成为728 再乘以 10,7280 转成16 位二进制补码1C70 步骤如何用代码实现呢?特别是取消小数点如何用代码实现?

浮点数内存中表示不是精确的,比如 float f = 72.8,内存里可能是 72.99999,转成字符串以后就不对了。除非你已字符串格式输入浮点数。
一个字符串取消小数点也太容易了,如下:

#include <string>
auto index = str1.find_first_of('.');
    if(index != std::string::npos) {
        // 找到了 移除小数点
        str1.erase(str1.begin()+index);
    }

我自己写了个输入浮点数消去小数点的程序,你可以稍微把它改进一下,跟楼上那个结合一下,就完美了


#include <iostream>
using namespace std;
#include <string>
#include <iomanip>
int main(){
     double m = 432.423;
    ostringstream strStream;
    strStream << m;
    string str=strStream.str();
   string str_inp1(".");
   string str_inp2(str);

    for(int i=0;i<str.length();i++){
        if( str_inp2.substr(i,1).compare(str_inp1)==0){
            string abs=str.substr(0,i)+str.substr(i+1,str.length()-1);
            cout<<abs<<endl;
            break;
        }
    }
}

//72.8 取消小数点成为728 再乘以 10,7280 转成16 位二进制补码1C70
#include <stdio.h>
int main() {
    float f=72.8f;
    short int hd;
    char s[5];

    hd=(short int)(f*100);
    sprintf(s,"%04hX",(unsigned short int)hd);
    printf("[%s]",s);//[1C70]
    return 0;
}