#include "stdio.h"
#include "conio.h"
void main() /*计算小数点后位数*/
{
float number=100.25432;
int temp;
int dot_loc=0;
temp=(int)number;
while(number-temp>0)
{
number=number*10;
temp=(int)number;
dot_loc++;
printf("%f\n",number-temp);
getch();
}
printf("digits after decimal point: %d\n",dot_loc);
getch();
}
由于浮点数本身就不精确,在存数的时候就会存成100.25432130xxx,他并不能精确的表达小数,那我应该怎么求小数点后位数呢。
是这样的。
这个不在考虑范围内,我早就想到了
追答哦,用字符串存放 不在考虑范围。
那么用2个整型数来分别存放整数部分和小数部分,肯定也想到了,也不在考虑范围内了。
那么估计就没办法了。
因为这不单单是存放长度问题,而是 10进制变2进制,一般的数都化不净。
就像 1.0/3.0 就是 0.33333...3333, 就算是取100位,第101位后就被截断了。就算用 double,
long double 存放,还是要被截断。
C99 新引入的 16进制指数形式(例如:0xb.1ep5 这种形式)也帮助不了10进制变2进制截断误差问题。
我也听说过java中有个BigDecimal,但是我没学过java,so不会~,就是不会写这个函数所以才拜托各位大神呢
不过你能懂我的意思,并且还热心回答了,虽然对我解决问题没有太大帮助,要是没有别人回答的话,我就采纳你的了
用到小数时,用两个int做分母和分子,储存时回避小数问题,保留精确结果。需要得到小数结果的时候,用位移和与或非处理这两个int(具体参考cpu数值运算原理),得到精确的小数结果。
如何用c语言计算小数点后位数(float本身都无法精确)
1、先把浮点数变成字符串,再通过小数点确定小点后面的位数。2、例程:include <stdio.h>#include <string.h>void main() { char * ptr; char strFloat[20]; float number=100.25432; sprintf(strFloat, "%f", number); ptr = strstr(strFloat, "."); if (ptr != ...
如何用c语言计算小数点后位数
可以使用sprintf(str,"%g",f);,然后由于f毕竟不是准确值,还是会出现有些问题,源码如下:include <stdio.h>#include <stdlib.h>#include <string.h>int main(int argc, char* argv[]){ char a[128]; float f; while(scanf("%f",&f)!=EOF) { sprintf(a,"%g",f); ...
C语言怎么精确浮点型变量到小数点后一位,例如0.1+0.1,它就显示0.20000000...
float无法精确表示0.2,可以考虑用整型数据保存2,当成0.2来使用,比如计算0.1+0.1可以计算1+1=2,这个2就是0.2 在计算机程序设计中,浮点数是不能指望精确存储或计算的,一定有误差,可以考虑控制误差的办法解决这个问题。
C语言中怎么取得小数点后面的数
float d;d = a - (int) a; \/\/ 用这个计算取得小数点后的数 printf("%f %f\\n",a, d );
C语言 如何确定输入的float型的小数点位数
因为scanf()里不能确定精度(小数点后的位数),只能确定长度。楼上说的%2f代表小数点2位并不正确,如果你输入的是2.22,这种方式只会取到2。 你可以换一种方式输入,输入的时候不用float型,用char str[100];scanf("%s",str);,这样输进来是个字符型数组。然后你再写个函数查找小数点后多少位。
怎么在c语言中输出小数点后6位?
float 为单精度,有效数字为6~7 double 为双精度,有效数字为15~16 但他们在输出时,小数点后都有6位小数。 如: main() { int a=15; float b=123.1234567; double c=12345678.1234567; char d='p'; printf("a=%d,%5d,%o,%x\\n",a,a,a,a); printf("b=%f,%lf,%5...
关于用C语言求一个小数求小数点后面的位数多少的问题,求大神解答。_百 ...
说句实话,如果是我,我绝对不会使用这种方式来计算。因为float精确到小数点后6位。我建议你通过这样的方式来计算:不定义浮点数,而是定义字符串,然后从小数点开始计算后面的长度即可。最主要的是假设你输入一个1.123456789123456789除了使用字符串的方式你无法通过正常的浮点数数据类型来精确计算。
C语言把小数精确到后一位:比如:
int的作用是将后面计算结果强制数据类型转换为int, 换句话说舍弃小数部分:i*10=123.4(i*10)+0.5=123.9 如果原小数点后第2位>=5,这个加法会导致进位,在整数部分实现四舍五入(int)((i*10)+0.5)=(int)(123.9)=123 取整实现舍弃后续位(int)((i*10)+0.5)*0.1=12.3 2 已赞过 已踩过< 你对这个回答...
c语言,float如何打印小数点后四位(不四舍五入)?
最简单的办法,显示的时候减掉 0.00005 再输出,a = 1.23456; printf( "%.4lf", a - 0.00005 );
如何让float变量精确到小数点后两位
在C语言中,当需要控制浮点变量的输出精度到小数点后特定位数时,可以利用数据类型和格式化输出函数来实现。首先,确保你的变量是单精度(float)或双精度(double)类型,因为这些类型支持精确的小数表示。对于输出,可以借助printf函数,它允许我们指定格式化字符串,以此来控制输出的精度。在printf的格式字符串中...