【问题标题】:How to form a Double with an Integer and Fractional parts如何用整数和小数部分形成双精度数
【发布时间】:2020-05-11 00:43:59
【问题描述】:

我有两个值,一个双精度数的整数部分和小数部分。形成双值的最佳方法是什么?本质上,它与modf() 正好相反。

我正在快速执行此操作,但我正在寻找任何数学方法。

let integer = 12
let fractional = 34
let d = ???(12, 34) // 12.34

【问题讨论】:

  • 你也可以找NSNumberFormatter
  • 这与modf 不相反。 modf 给出分数部分作为分数。你有它作为一个整数。这个整数总是分数的 100 倍吗?或者 0.789 可以是 789?如果是这样,我们怎么知道 34 是 0.34 还是 0.034?对于 12.34 无法用二进制浮点表示这一事实,您想做什么?谁给了你这个整数和小数部分作为整数,为什么它们对你很重要?
  • 分数是没有意义的,不说它是of的分数。我们怎么知道34 不是0340034
  • @MichaelOzeryansky:您如何将12.03 的小数部分表示为整数,这与12.3 的小数部分有何不同?
  • @MichaelOzeryansky:这个 API 是什么?

标签: c swift floating-point double fractions


【解决方案1】:

对于一般情况,您必须找到小数部分中的位数。所以我假设 x 作为整数部分, y 作为小数部分。然后你必须将 y 除以 10 的 y 位数的幂。然后你必须将 x 添加到更新后的 y 值。

这是代码,

#include <stdio.h>
#include<math.h>
int main()
{
    int x,y;
    scanf("%d %d",&x,&y);
    int count = 0;
    int z = y;
    while(z>0)
    {
        count+=1;
        z = z/10;
    }
    float ans = 0;
    ans = (double)x + (double)y/pow(10,count);
    printf("%f",ans);
    return 0;
}

希望这能解决您的问题。

如果 x 和 y 也被视为浮点数,那么还有更好的解决方案。感谢乔尔·赫克特

#include <stdio.h>
#include<math.h>
int main()
{
    double x,y;
    scanf("%lf %lf",&x,&y);
    while(y>=1)
    {
        y = y/10.0;
    }
    printf("%lf",x+y);
    return 0;
}

P.S :- 如果给出的数字是负数,你必须小心。

【讨论】:

  • 这个算法一定有办法优化一点:zy 有相同的值,并且都除以相同的10 次方;唯一的区别是y在操作之前被强制转换为double
猜你喜欢
  • 2013-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-05
  • 1970-01-01
  • 2011-02-14
  • 1970-01-01
  • 2019-07-13
相关资源
最近更新 更多