浮点数 根据输入的值确定输出小数点后的位数(难度:***)

本文介绍了如何使用longdouble和longlong类型处理浮点数,以解决精度、数值范围和溢出问题,通过function函数调整并精确打印浮点数,以避免小数点后多余的0和保证准确性。
摘要由CSDN通过智能技术生成

先看程序运行画面:

实现这个看似简单实际上比较复杂,话不多说直接开始。

程序主体

这里的founction函数会根据输入的n,来修改a

print函数则实现a的打印。为什么不直接打印修改后的a呢?举个例子,浮点数 x=0.1,你调用printf函数打印x的话输出的会是0.1000000。后面这么多0,长得太丑了,所以我们不直接printf打印(这一步不要求的同学可以跳过)。

founction函数:

这里比较复杂,我先举个例子:我们如果将0.123保留两位小数该怎么搞呢?保留两位小数就是要得到0.12嘛,可能很多人想到了利用整形会忽略小数的特性,先将0.123乘以100,得到12.3,再转换成整形,于是就变成12啦,那12怎么转换到0.12呢?直接用12乘以0.01就好了嘛。

通过这个例子我们再看这个founction函数是不是就豁然开朗了呢?也就是先把a乘以10的n次方,再转换为整形(这里的long long 也属于整形,至于为什么不用int后面讲)去掉小数部分,再乘以10的负n次方变回小数。这样通过founction函数修改后的a就是我们想要的那个数啦。

接下来要做的是将a打印在屏幕上,这里其实方法很多,以下是我给出的办法。

print函数:

我想出的一个办法是先打印整数部分,再打印小数部分。

第一步先故技重施把a的整数部分给integer(这个单词是整数的意思),然后把它打印出来

第二步打印一个小数点  “ . ” ,很简单

最后一步比较复杂,我们慢慢看: 我们想要得到小数部分,先要把小数点前面的整数部分去掉,可以直接用我们的a减去integer(注意变量类型要转换成一样的),也就是(a-(long double)integer)这一步,如果a等于9.123的话,我们会得到0.123。但是我们想打印的是123,所以要乘以10的n次方,也就是 ((a - (long double)integer) * pow(10, n)) 这一步。最后将它转换成整形打印出来,就大功告成了!

为什么要使用long long 和long double类型

使用int或float类型存在以下问题:

1.数值范围太小,初始化定义一个较大的数值会导致信息丢失

2.转换方面存在问题,在founction函数中需要乘10的n次方,可能存在溢出问题

3.使用单精度浮点型精度远远不够,当你输入较大的n时打印出的跟原来的数甚至会对不上,这是单精度浮点型不够准确而导致的。

所有代码均个人创作,如需引用请标明出处。

全部代码:
#include <stdio.h>
#include <math.h>

void founction(long double* a, int n)
{
	long double temp = *a;
	temp *= pow(10, n);
	long long v = (long long)temp;
	*a = v * pow(10, -n);
}
void print(long double a,int n)
{
	int integer = (int)a;
	printf("%d", integer);
	printf(".");
	int decimal = (int)((a - (long double)integer) * pow(10, n));
	printf("%d",decimal);
}
int main()
{
	long double a = 99.123456789;
	int n;
	printf("a=%.9llf,保留到小数点后多少位?\n:>", a);
	scanf("%d", &n);
	founction(&a, n);//修改a的值
	print(a,n);//将修改后的a精确打印出来
	return 0;
}

如有疏漏,欢迎大佬指正!!!

FreshmanStudyC

  • 13
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 好的,这个问题很简单。以下是代码: ```python num = float(input()) abs_num = abs(num) print("%.2f" % abs_num) ``` 请问还有其他问题吗? ### 回答2: 要回答这个问题,我们需要编写一个简短的程序来实现。下面是使用Python编写的一个例子: ```python num = float(input("请输入一个浮点数:")) # 获取用户输入浮点数 abs_num = abs(num) # 使用abs()函数获取浮点数的绝对 two_decimal = "{:.2f}".format(abs_num) # 使用"{:.2f}"格式化字符串保留两位小数 print("这个浮点数的绝对为:", two_decimal) # 输出结果 ``` 这个程序首先使用`input()`函数提示用户输入一个浮点数,并将其转换为浮点类型。然后,使用`abs()`函数获取浮点数的绝对。接下来,使用`"{:.2f}"`格式化字符串将绝对限制为两位小数。最后,使用`print()`函数输出结果。 希望这个答案能够帮助到你! ### 回答3: 要求输入一个浮点数,并输出浮点数的绝对,保留到小数点后两位。 解决这个问题可以采用以下步骤: 1. 接受用户输入,将输入的内容保存到一个变量中。 2. 对输入的数字进行判断,如果小于0,则将其乘以-1使其变为正数;如果大于等于0,则保持不变。 3. 使用内置函数round()对绝对进行四舍五入,并且保留两位小数。 4. 输出结果。 下面是一个实现该功能的代码示例: ```python num = float(input("请输入一个浮点数:")) # 接收用户输入浮点数 abs_num = abs(num) # 求输入浮点数的绝对 result = round(abs_num, 2) # 对绝对进行四舍五入,并保留两位小数 print("输入浮点数的绝对为:{:.2f}".format(result)) # 输出结果 ``` 例如,如果用户输入-3.1415926,则程序将输出: ``` 输入浮点数的绝对为:3.14 ``` 这样就实现了输入一个浮点数输出这个浮点数的绝对,并保留到小数点后两位的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值