如何只用C语言编写小数位?

时间:2015-09-23 16:32:16

标签: c floating-point

如果我有2.55,我如何只编写.55并在编程语言中跳过2?

4 个答案:

答案 0 :(得分:2)

你可以这样做把它存放在另一个变量中 -

 double a=2.55,b;
 b =a-(long)a;                   // subtracting  decimal part from a
 printf("%.2f\n",b);

正如Mark Dickinson先生在评论中指出的那样,这是不安全的。因此,您可以使用<math.h> -

中的函数modf

例如 -

double a=-2.55,b,i;
b =modf(a,&i);                   // i will give integer part and b will give fraction part
printf("%.2f\n",b);

答案 1 :(得分:2)

使用double modf(double value, double *iptr)获取派系部分。使用round()可以获得接近请求精度的最佳值。

double GetDecimalPlaces(double x, unsigned places) {
  double ipart;
  double fraction = modf(x, &ipart);
  return fraction;
  // or 
  double scale = pow(10.0, places);
  return round(fraction * scale)/scale;
}

void GetDecimalPlaces_Test(double x, unsigned places) {
  printf("x:%e places:%u -->", x, places);
  printf("%#.*f\n", places, GetDecimalPlaces(x, places));
  // Additional work needed if leading '0' is not desired.
}

int main(void) {
  GetDecimalPlaces_Test(2.55, 2);
  GetDecimalPlaces_Test(-2.55, 2);
  GetDecimalPlaces_Test(2.05, 2);
  GetDecimalPlaces_Test(0.0, 2);
  GetDecimalPlaces_Test(0.0005, 2);
}

输出

x:2.550000e+00 places:2 -->0.55
x:-2.550000e+00 places:2 -->-0.55
x:2.050000e+00 places:2 -->0.05
x:0.000000e+00 places:2 -->0.00
x:5.000000e-04 places:2 -->0.00

答案 2 :(得分:1)

一个肮脏的伎俩就是将double投射到int以获得整个数字。然后你可以减去这两个只得到小数部分:

double d = 2.55;
double remainder = d - (int)d;
printf ("%.2f\n", remainder);

答案 3 :(得分:1)

double值不是非常精确,因此可以引入小的舍入误差。您可以将总数存储在整数中。例如,您可以除以100以获取.之前的值,并使用%模数来获取小数值。

示例:

int main()
{   
    int num = 255;

    printf("%d.%d\n", num / 100, num % 100); // prints 2.55
    printf(".%d", num % 100);                // prints .55

    return 0;
}

这会因负数而失败,但您可以轻松添加案例来处理该问题。