有没有办法确定我的小数点后两位数有多少数字。例如double a=3.14259
如果我现在制作一个新的int b
,我怎样才能使b
的值等于a
小数点后的数字?
答案 0 :(得分:2)
简短的回答是,你不能。
首先,类似double
的类型在(二进制)句点之后总是具有相同数量的二进制数字。那叫做尾数。在双精度为53位的情况下,意味着在二进制周期之后为52位,在十进制中为大约15位。有关详细信息,您可以查看IEEE_754 (double precision)
将double转换为十进制字符串时,通常不会匹配精确的十进制数。例如,值0.1
无法用double值精确表示。 printf可以显示" 0.1"在应用舍入后。
但是,当您处理一些双重计算时,您会遇到0.10000000000012
或0.09999999999987
这样的小推导。在这种情况下你会做什么?
还有一个与c ++双打无关的数学问题:
_
0.1 is equal to 0.09
所以你的回答是1或无穷大
答案 1 :(得分:0)
这是一种方法:将小数转换为字符串,并查找小数点后子字符串的大小,如下所示:
#include <iostream>
#include <string>
int main()
{
double a = 3.14259;
std::string a_string = std::to_string(a);
a_string.erase ( a_string.find_last_not_of('0') + 1, std::string::npos ); //Get rid
//of extra zeroes
std::cout << a_string.substr(a_string.find('.') + 1).size() << "\n";
//Print the size of the substring of the original string from the decimal point (here 5)
}
答案 2 :(得分:0)
您可以将小数部分视为字符串文字。利用std::stringstream和std::string:
#include <iostream>
#include <string>
#include <sstream>
int main(){
double whole = 3.14259;
auto fractionalno = whole - static_cast<long>(whole); // or use std::modf()
std::stringstream ss;
ss << fractionalno;
std::string s = ss.str();
s.erase(0,2);
std::cout << "The number of digits is: " << s.size();
}
答案 3 :(得分:-2)
浮点数不提供点后的位数。 (它甚至不是&#39;确切的值。这是一个近似值。)
但是如果你只是想让另一个整数在屏幕上的点之后具有相同的位数,为什么不算数呢?
这是Python代码:
a = 4.0 / 7
# a is 0.5714285714285714
b = str(a)
# b (str(a)) is 0.571428571429, different with a.
nod = len(b[b.index('.'):])
_c = 9.0 / 7
c = float(int(_c * 10 ** nod)) / 10 ** nod