整体和分数浮动/加倍?

时间:2016-10-01 12:43:23

标签: c++ floating-point double

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

分数部分缩放到第9位。

实施例: 签名长h = -5; 长f = 200073490

结果应为-5.20007349

示例2: 签名长h = 3; long f = 500100;

结果应为3.0005001

编辑 另外:寻找数学解决方案。转换为字符串并将其扫描回float / double将无法在我的项目中使用。

1 个答案:

答案 0 :(得分:1)

由于代表小数部分的long inth按比例缩放1000,000,000,您只需要将其除以1000000000并更正该事件中的符号,该对的整数部分为负。也就是说,当基数为正时,添加缩放的小数部分,当基数为负时,减去缩放的小数部分。鉴于h是整数部分而f是小数部分,将这些结合起来产生双精度的表达式是:

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

当h不为负时,表达式(1-2*(h < 0))产生1,否则为-1。