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;
}