怎么精确提取一个浮点数的小数部分?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么精确提取一个浮点数的小数部分?相关的知识,希望对你有一定的参考价值。

#include <stdio.h>int main()float x=438.976,y;y=x-(int)x;//本想得到0.976 printf("y=%lf\n",y);//实际上输出 0.976013return 0;//怎么精确提取一个浮点数的小数部分?

需要改写printf()函数
改写为 printf("y=%.3lf \n",y)
这样就可以了,你有时间的时候可以试一试。就是控制浮点数的输出格式。
参考技术A 这个modf可以提取整数部分和小数部分,但不精确的原因不在这里。举个最简单的例子,0. 3是一个精确的十进制数,但如果转化成2进制就会是一个无限循环小数。或者说不可能实现精确的float x=0.3。由于这个不精确,后续的操作无论多么精确都不可能实现精确的计算。很多计算机系统为了更高的精度都使用定点数,或者分数表示小数,以确保结果的准确性。如果有兴趣可以参考ieee854。本回答被提问者采纳 参考技术B 问这个问题说明你对二进制小数理解不足。计算机浮点数表示本身就不是精确的,你不可能“精确”,所以你必须确保对计算精度有一个非常好的理解。 参考技术C

参考技术D 用双精度浮点数 double

C语言浮点数除法可以精确到多少位小数

double型的两个数相除,得到的浮点数能精确到多少位呢。。用我家电脑做了个实验,编译器是Code::Blocks 13.12。

然后用电脑自带的计算器算的结果和C语言算的结果比较如图。

技术分享

第一例里a=199000007,b=3030337,得到的答案在小数点后第14位(我没数错吧)开始不同了。

第二个例子里a=202033320333,b=1234567,在小数点后第11位开始不同了。

所以浮点数除法精确的位数是不固定的。

以上是关于怎么精确提取一个浮点数的小数部分?的主要内容,如果未能解决你的问题,请参考以下文章

JS实现浮点数精确舍入小数点

精度浮点型数据精确到了几位小数呢?

js浮点数的加减乘除解决方案

frame的数值如果是浮点数,该怎么取舍只保留小数点后1位

C语言浮点数除法可以精确到多少位小数

Java中怎么把浮点数转变成整数只保留整数部分