IEEE-754 Float to int

Greg KH greg at kroah.com
Tue Nov 22 11:55:50 EST 2016


On Tue, Nov 22, 2016 at 04:44:43PM +0000, Lucas Tanure wrote:
> 
> 
> On Tue, Nov 22, 2016 at 4:39 PM, Greg KH <greg at kroah.com> wrote:
> 
>     On Tue, Nov 22, 2016 at 04:05:18PM +0000, Lucas Tanure wrote:
>     > Hi, 
>     >
>     > At some point my hardware gives me a 32bit IEEE-754 float, like this :
>     >
>     >
>     > regmap_read(device->regmap, ADDR0, &temp);
>     >
>     > value = temp << 16;
>     >
>     > regmap_read(device->regmap, ADDR1, &temp);
>     >
>     > value |= temp;
>     >
>     >
>     > So, value has a 32bit float now, and I would like to print just the
>     integer
>     > part, like :
>     > Read 26.92387 --> Print 26. 
>     > Simple, no float operations. 
>     >
>     > How I can do it ?
> 
>     Just print the upper 16 bits shifted right by 16 bits. 
> 
> 
>     But why would you want to print the value anyway?  Who would use it?
> 
> My hardware gives me the board temperature as a float 32bits. 
> And the hwmon sysfs api asks me to return the temperature as millidegree
> Celsius.
> 
> To follow the hwmon sysfs api rules, I need to get my float, multiply by 1000
> and print the integer part. 
> There is a better way to do that ?

Ah, yeah, sorry, my example is wrong.  There's got to be other drivers
that also do this same thing, try asking on the hwmon mailing list, they
should know how to do this best, as they are the ones responsible for
that user/kernel api.

thanks,

greg k-h



More information about the Kernelnewbies mailing list