C++ 将数字四舍五入到指定精度
任务是:我有数字a=2.718281828459042353602875 逗号后是25位。我需要写一个程序,将这个数字四舍五入到指定的精度 精度限制为0C++ 将数字四舍五入到指定精度,c++,C++,任务是:我有数字a=2.718281828459042353602875 逗号后是25位。我需要写一个程序,将这个数字四舍五入到指定的精度 精度限制为0>n; 而(1!=0){ b=b*10; c=b; 如果(kiek==n)断裂; kiek++; cout基本问题是:双精度的最大精度约为17位。即使您写入double a=2.7182818284590452353602875;最后的数字也会被忽略 如果你真的需要高达100位的og精度,你必须使用一个特殊的库,其中一个(GMP)已经在评论中提到
Output: 3
投入:25
Output: 2.7182818284590452353602875
投入:4
Output: 2.7183
等等
这是我的密码。它工作得很好,但如果n>17,我将超出unsigned long
范围
#include <iostream>
#include <iomanip>
#include <cmath>
#include <math.h>
using namespace std;
int main()
{
double a=2.7182818284590452353602875;
double b=a;
unsigned long long c=a;
int n;
int kiek=0;
cin>>n;
while (1!=0){
b=b*10;
c=b;
if (kiek==n) break;
kiek++;
cout<<c<<endl;
}
cout<<c<<endl;
if((c%10)>4) {c=c/10+1;}
else {c=c/10;}
double atgal=1;
for(int i=0;i<n;i++){
atgal*=10;
}
cout<<endl<<atgal<<endl;
b=c;
b=b/atgal;
cout<<fixed<<setprecision(n)<<b;
}
#包括
#包括
#包括
#包括
使用名称空间std;
int main()
{
双a=2.718281828459045353602875;
双b=a;
无符号长c=a;
int n;
int kiek=0;
cin>>n;
而(1!=0){
b=b*10;
c=b;
如果(kiek==n)断裂;
kiek++;
cout基本问题是:双精度的最大精度约为17位。即使您写入double a=2.7182818284590452353602875;
最后的数字也会被忽略
如果你真的需要高达100位的og精度,你必须使用一个特殊的库,其中一个(GMP)已经在评论中提到
如果您不需要更高的精度,并且只有输出格式对您很重要,请使用以下方法:
std::cout << std::setprecision(n) << a;
std::cout这可以通过printf
精度设置完成:
printf("%.*f", precision, value);
<>输出应根据C++和C标准(C:7.21.61.8:“数值舍入到适当位数”)舍入(不只是截断)值。
使用iostreams
可以获得相同的结果:
std::cout << std::fixed << std::setprecision(precision) << value;
我自己找到了新的解决方案^”
#包括
使用名称空间std;
int main()
{
int sk[25]={7,1,8,2,8,1,8,2,8,4,5,9,0,4,5,2,3,3,6,0,2,8,7,5};
int n=0;
cin>>n;
如果(n==0)如果您希望精度超过大量数字,您将被类型本身的精度所阻止。您可以使用类似GMP的库。不是..Mhmm…谢谢!但我只能使用默认库。我需要将此文件发送到另一个编译器,我无法编辑或包含特定库…SetPrecision只需删除数字ed将其数学化为四舍五入:(例如,2.718~2.72Addfixed
到round:std::cout-Ummm。数字是2.7182818284590453602875。我需要得到2.71828182845904523。使用我的代码和n=17,我得到2.7182818284590465。使用std::cout,我在写大约17个有效数字时有点夸张了。实际上它更少。另外,你还需要c。)计算小数点前的数字。如果你真正深入了解细节,数字表示是一个复杂的主题。我建议的方法应该可以很好地工作,只要你保持远远低于浮点精度的限制。
double integerPart = 0;
double fractionalPart = 0;
// print the integer part
fractionalPart = modf(value, &integerPart);
printf("%.0f", integerPart);
// print the decimal point
printf(".");
// print the fractional part digit by digit
for (int i = 0; i < precision; ++i) {
fractionalPart *= 10;
fractionalPart = modf(fractionalPart, &integerPart);
printf("%.0f", integerPart);
}
#include <iostream>
using namespace std;
int main()
{
int sk[25]={7,1,8,2,8,1,8,2,8,4,5,9,0,4,5,2,3,5,3,6,0,2,8,7,5};
int n=0;
cin>>n;
if(n==0) cout<<3;
else if (n==25) {
cout<<2<<".";
for(int i=0;i<n;i++){
cout<<sk[i];
}
}
else{
if (sk[n]>4){
if(sk[n-1]==9){
sk[n-1]=0;
sk[n-2]++;
}
else sk[n-1]++;
}
cout<<2<<".";
for(int i=0;i<n;i++){
cout<<sk[i];
}
}
return 0;
}