Tag: 浮点转换

sscanf使用c浮动

所以我有一个包含多个字符串的文件。 我应该使用fgets来读取每一行然后使用sscanf来打破字符串并将它们处理到我的结构中。 这是一个例子。 38L Lee, Victor; 2.8 第一个是id,第二个是名称,最后是gpa。 当我尝试使用sscanf读取gpa时,它的读数为0.0,而不是2.8。 这是我的代码。 bool getstu (FILE* fpstu, STU* pstu) { // Local Definitions int ioResult; char temp[100]; char *ptr; char tempStr[50]; // Statements fgets(temp, sizeof(temp), fpstu); { ptr = temp; sscanf(ptr, “%3s”, pstu->id); ptr += strlen(pstu->id) + 1; sscanf(ptr, “%[^;]”, tempStr); pstu->name = aloName(tempStr); ptr += strlen(tempStr) + […]

正确的算法将二进制浮点“1101.11”转换为十进制(13.75)?

我用C编写了一个程序,将二进制 ( 1101.11 ) 表示的浮点数转换为十进制数( 13.75 )。 但是,我似乎无法从算法中获得正确的值。 将二进制浮点数转换为十进制的正确方法是什么? 我正在使用Dev CPP编译器(32位)。 算法定义如下: void b2d(double p, double q ) { double rem, dec=0, main, f, i, t=0; /* integer part operation */ while ( p >= 1 ) { rem = (int)fmod(p, 10); p = (int)(p / 10); dec = dec + rem * pow(2, t); […]

%g如何舍入浮点数?

虽然我在printf()使用%g作为格式说明符,但有时它会在小数点后向上舍入到2个位置,有时会达到3个位置,有时会达到4个位置……它是如何做到的? 实际上我们应该使用%g而不是%f或%e作为浮点数?

理解if()中的float变量比较

无法找到以下代码的原因: #include int main() { float f = 0.1; if (f == 0.1) printf(“True”); else printf(“False”); return 0; } 输出为false。 #include int main() { float f = 0.1; if (f == (float)0.1) printf(“True”); else printf(“False”); return 0; } 现在显示正确的输出。 这背后的原因是什么? 这种行为的原因是什么呢? #include main() { int n = 0, m = 0; if (n > 0) […]

按位浮点数到Int

我试图找出这个算法,但我得到谷歌的所有东西都是用铸造做的。 我需要知道细节。 所以,如果我们有一个浮点x并想要返回它的二进制表示,我们需要做什么? 我知道我们需要返回浮点数,如果它的NaN或无穷大,但其他步骤是什么? 编辑 该函数接受一个unsigned int,就像它是一个float一样,然后返回该数字所代表的整数。 我不能使用转换,只是条件和按位运算符。

将float转换为unsigned long以访问c #define中的float内部

我想将float转换为unsigned long ,同时保持float的二进制表示(所以我不想将5.0为5 !)。 这很容易通过以下方式完成: float f = 2.0; unsigned long x = *((unsigned long*)&f) 但是,现在我需要在#define做同样的事情,因为我想稍后在一些数组初始化中使用它(所以[inline]函数不是一个选项)。 这不编译: #define f2u(f) *((unsigned long*)&f) 如果我这样称呼它: unsigned long x[] = { f2u(1.0), f2u(2.0), f2u(3.0), … } 我得到的错误是(逻辑上): lvalue required as unary ‘&’ operand 注意:下面建议的一个解决方案是为我的数组使用union类型。 但是,这没有选择。 我实际上在做以下事情: #define Calc(x) (((x & 0x7F800000) >> 23) – 127) unsigned long x[] = […]

为什么IEEE-754浮点数不能在平台之间交换?

已经断言 (甚至考虑字节字节序)IEEE754浮点并不保证在平台之间可以交换。 所以: 理论上,为什么IEEE浮点不能在平台之间交换? 这些问题是否适用于现代硬件平台(例如i686,x64,arm)? 如果问题是有效的,你能否请举例说明这种情况(首选C或C ++)? 动机:一些GPS 制造商在“符合IEEE-754标准的浮点值”中交换(例如)纬度,经度和原始数据的二进制格式。 因此,我无法控制选择文本格式或其他“便携式”格式。 因此,我的问题是,差异可能会或可能不会发生。

将float转换为char *

如何在C语言中将float值转换为char* ?

int和float的大小

我有关于整数和浮点范围的问题: 如果它们都具有相同的4字节大小,为什么它们具有不同的范围?

读取浮动到数组中

我怎么能读取让我们说10个浮点数并将它们存储在一个数组而不浪费任何内存?