微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从浮点数中得到精确的小数部分作为整数?

十进制和&有很多问题和答案.从浮点数中提取整数并获取某些特定小数点的输出.但没有人能解决我的问题.如果有人能帮助我解决我的问题,请

我实际上是试图从浮点数中提取精确的小数部分.我试过这个:

float f=254.73;

    int integer = (int)f;
    float fractional = f-integer;

    printf ("The fractional part is: %f",fractional);

输出为:0.729996.出于这个原因,当我这样做时:

float f=254.73;

    int integer = (int)f;
    float fractional = f-integer;
    int fractional_part_in_integer = ((int)(f*100)%100);

    printf ("The value is: %d",fractional_part_in_integer);

它给了我72作为输出.但是,我想从给定的数字254.73中精确地提取73.我已经知道如何在printf()函数中使用%.2f来打印最多两个十进制数字.但在我的代码中,我现在不想打印这个数字.我有一些计算,其中小数部分为整数形式,即73.所以,我的问题是如何从254.73中提取小数部分,以便我可以得到精确的73作为整数来进行更多的计算?

希望,我能让每个人都理解.

解决方法

最简单的方法是使用来自< math.h>的标准库函数ceil.
浮点数254.73可能会转换为254.7299957275390625000000.
f-integer将给出0.7299957275390625000000.
现在将它乘以100并使用ceil函数获得不小于72.99957275390625000000的最小整数值.
int fractional_part_in_integer = ((int)ceil(fractional*100)) % 100;

更新:正如comment@Sneftel所指出的,本答案中的上述建议方法不能始终如一.

一个简单的hack是使用math.h中的round函数来舍入f然后提取小数部分

float f=254.73;

int int_part = (int)f;
float fractional = round(f*100)/100 - int_part;
int fractional_part_in_integer = (int)(fractional*100);

printf("%d,%d\n ",int_part,fractional_part_in_integer);

输出

254,73

原文地址:https://www.jb51.cc/c/116701.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐