获得数字的分数部分的最佳方法

Jon*_*Mee 0 c++ decimal modulo fractions fmodf

鉴于const auto foo = 13.42我想得到数字小数部分,所以.42

我倾向于使用fmod像:fmod(foo, 1.0)

但我也可以做foo / static_cast<int>(foo) - 1.0或者或许其他一些神秘的方法.

我不会简单地使用动机fmod吗?

Car*_*arl 6

我可以想到的两种方式,无论是演员还是四舍五入 std::floor

int main()
{    
    const auto foo = 13.53;

    auto firstWay = foo - static_cast<long long>(foo);  // Truncating via cast and subtracting

    auto otherWay = foo - std::floor(foo); // Rounding down and subtracting

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

快速工作台结果显示该fmod方法是迄今为止最慢的选项,而演员是最快的:QuickBench

  • 我更喜欢第二个版本.第一个可能会爆炸,因为双倍可以存储比"int"中的数字更大的数字. (2认同)
  • @JonathanMee相关标准是*有三种浮点类型:float,double和long double.double类型提供至少与float一样多的精度,long double类型提供至少与double一样多的精度.*AFAIK除了我刚刚引用的"double"之外没有大小要求,它需要能够存储值"1e + 37".这意味着您可以拥有128位双倍且符合标准. (2认同)