如果我有2.55
,我如何只编写.55
并在编程语言中跳过2?
答案 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;
}
这会因负数而失败,但您可以轻松添加案例来处理该问题。