Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 整型和分数型浮动/双精度?_C++_Floating Point_Double - Fatal编程技术网

C++ 整型和分数型浮动/双精度?

C++ 整型和分数型浮动/双精度?,c++,floating-point,double,C++,Floating Point,Double,如果我有一个带符号的长变量,它包含小数的整数部分,另一个长变量包含小数部分,我该如何将其转换为float或double类型 分数部分按比例缩放到第9位 例如: 符号长h=-5; 长f=200073490 结果应为-5.20007349 例2: 符号长h=3; 长f=500100 结果应为3.0005001 编辑 另外:寻找一个数学解。转换为字符串并将其扫描回float/double在我的项目中不起作用。由于表示小数部分的long int,h按100000000的比例缩放,您只需将其除以10000

如果我有一个带符号的长变量,它包含小数的整数部分,另一个长变量包含小数部分,我该如何将其转换为float或double类型

分数部分按比例缩放到第9位

例如: 符号长h=-5; 长f=200073490

结果应为-5.20007349

例2: 符号长h=3; 长f=500100

结果应为3.0005001

编辑
另外:寻找一个数学解。转换为字符串并将其扫描回float/double在我的项目中不起作用。

由于表示小数部分的
long int
h
按100000000的比例缩放,您只需将其除以100000000,并在该对的整数部分为负数时更正符号。也就是说,当基数为正时,添加缩放分数部分,当基数为负时,减去缩放分数部分。假设
h
是整数部分,而
f
是小数部分,则将这两个部分结合起来生成双精度的表达式为:

double result=h+(1-2*(h<0))*f/100000000.0


表达式<代码>(1-2*(h<0))< /> >当h不为负时,则为1,否则A—1。< /P>这是C或C++的VisualStudioC+++代码> char缓冲区[64 ];双v;sprintf(缓冲区,“%ld.%ld”,h,f);sscanf(缓冲区、%lf、&v)或使用

stringstream
@BLUEPIXY我正在寻找一个数学解决方案。在我的项目中,转换为字符串并将其扫描为float/double是不可行的。而且它可能非常慢。长时间的规模是多少?因为如果长时间的
12345678
将导致
5.12345678
,则必须除以
100000000
才能得到该分数。但是您的
73490
只需除以
100000
。你如何表示,比如说,
0.000123
?否则,为什么您的组合不会导致,比如说,
5.0007349
甚至
5.0000000007349