如果我有一个有符号的long变量,它包含小数的整数部分,另一个长变量包含小数部分,我该如何将它转换为float或double类型?
分数部分缩放到第9位。
实施例: 签名长h = -5; 长f = 200073490
结果应为-5.20007349
示例2: 签名长h = 3; long f = 500100;
结果应为3.0005001
编辑 另外:寻找数学解决方案。转换为字符串并将其扫描回float / double将无法在我的项目中使用。
答案 0 :(得分:1)
由于代表小数部分的long int
,h
按比例缩放1000,000,000,您只需要将其除以1000000000并更正该事件中的符号,该对的整数部分为负。也就是说,当基数为正时,添加缩放的小数部分,当基数为负时,减去缩放的小数部分。鉴于h
是整数部分而f
是小数部分,将这些结合起来产生双精度的表达式是:
double result=h + (1-2*(h < 0)) * f/1000000000.0;
当h不为负时,表达式(1-2*(h < 0))
产生1,否则为-1。