C++ 整型和分数型浮动/双精度?
如果我有一个带符号的长变量,它包含小数的整数部分,另一个长变量包含小数部分,我该如何将其转换为float或double类型 分数部分按比例缩放到第9位 例如: 符号长h=-5; 长f=200073490 结果应为-5.20007349 例2: 符号长h=3; 长f=500100 结果应为3.0005001 编辑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在我的项目中不起作用。由于表示小数部分的
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
?