c++将两个浮点数相除得到int

c++ dividing two floats results in an int

本文关键字:int 浮点数 两个 c++      更新时间:2023-10-16

我创建了一个小程序,它应该使用c++中莱布尼茨公式的前26次迭代来计算圆周率,只是想看看它是否可行。当我运行代码时,它输出的是4而不是浮点数。发生了什么,我该如何解决?下面是代码:

#include <iostream>
#include <math.h>
using namespace std;
int main ()
{
    float a = 1/1;
    float b = 1/3;
    float c = 1/5;
    float d = 1/7;
    float e = 1/9;
    float f = 1/11;
    float g = 1/13;
    float h = 1/15;
    float i = 1/17;
    float j = 1/19;
    float k = 1/21;
    float l = 1/23;
    float m = 1/25;
    float n = 1/27;
    float o = 1/29;
    float p = 1/31;
    float q = 1/33;
    float r = 1/35;
    float s = 1/37;
    float t = 1/39;
    float u = 1/41;
    float v = 1/43;
    float w = 1/45;
    float x = 1/47;
    float y = 1/49;
    float z = 1/51;
    float a1 = a-b+c-d+e-f+g-h+i-j+k-l+m-n+o-p+q-r+s-t+u-v+w-x+y-z;
    float b1 = a1*4;
    cout << b1;
}

是的,我知道有更简单的方法来做到这一点,但这只是一个概念的证明。

使用

float b = 1/3;

赋值操作符的RHS使用整数除法求值,结果为0。除a为1外,其他变量均为0。

为了避免这种情况,请使用

float b = 1.0f/3;

float b = 1.0/3;

另一种方法是使用强制转换

float a = (float)1/1; // C-style cast

float a = float(1)/1;