首页 > 解决方案 > 浮动到字符串而不四舍五入

问题描述

我想从十进制数中提取小数位。没那么难,对吧?

所以,我将浮点数转换为字符串。

然后,我曾经substr()从 , 开始裁剪字符串string.find('.')+1,直到结束。

嗯....问题就在这里。当我们有这样的数字时:5.7741589,它不是那么“精确”,它实际上是:5.774159

如果它自己四舍五入,我不能精确地得到小数位数......所以问题是:

如何在不四舍五入的情况下将十进制数转换为字符串?

编辑:由于很多人都在要求实际的输入和输出以及代码,所以这里是:

Input: 5.7741589
Output (let's say we want to output just decimal places): 7741589
Output (not expected one): 774159

代码:

float num;
cin>>num;
string s = to_string(num);
s = s.substr(s.find('.')+1,s.length());
cout<<s<<endl;

EDIT2:还有一件事。我需要这个来进行竞争性编程,我可以将输入作为字符串来做这个练习。想象一下你有 2 个小数的问题,你需要将它们相乘,然后计算小数位数。然后你再次失去小数位,这是问题。

标签: c++stringfloating-pointroundingprecision

解决方案


一旦您使用二进制浮点数对十进制数进行建模,就会出现腐烂:浮点方案对实数的子集进行建模。在这方面,使用整数类型没有什么不同:从概念上讲,出现的问题没有什么不同。

如果您想准确地模拟十进制数字,请使用十进制类型。


推荐阅读