嗨,我正试图从一个转换int
为一个float
在C中,由于某种原因,演员改变了价值,我不知道为什么.所以:
fprintf (stderr, "%d,%d\n", rgbValues->green, (float)rgbValues->green);
Run Code Online (Sandbox Code Playgroud)
产生两个不同的数字.请注意,这rgbValues->green
是一个int
.
知道为什么会这样吗?
谢谢
Ara*_*raK 10
你必须在你的格式字符串中说.使用:
fprintf(stderr, "%d,%f\n", rgbValues->green, (float)rgbValues->green);
^
Run Code Online (Sandbox Code Playgroud)
代替:
fprintf(stderr, "%d,%d\n", rgbValues->green, (float)rgbValues->green);
^
Run Code Online (Sandbox Code Playgroud)
请注意从更改d
到f
(抑扬符^
不是代码的一部分,只是指向何处查看).
该%d
格式说明说来printf
,"采取下一个4个字节从堆栈中,将其解释为一个整数,并打印出整." 由于您实际上是将a float
作为参数传递,因此float
(以IEEE-754格式存储)的字节被误解为整数,因此具有不同的值.(实际上,在变量函数中,它将float
被转换为double
由于参数提升,并且它被提升的前4个字节double
被解释为整数.)
正确的解决方案是使用中的所述一个%e
,%f
或%g
代替格式说明%d
打印出时float
. %e
说,"从堆栈中取出接下来的8个字节,将它们解释为a double
,并使用科学(指数)表示法 %f
打印出来"使用定点格式%g
打印出来,并打印出较短的%e
或者%f
.
fprintf(stderr, "%d,%f\n", rgbValues->green, (float)rgbValues->green);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1552 次 |
最近记录: |