仅显示C中浮点数25.50的小数的最简单方法是什么?

时间:2015-01-23 16:26:07

标签: c

刚刚开始C.例如给出数字浮动$ 25.50。我想分别显示美元和美分。因此,对于美元,我可以使用%.0f来显示25.我怎么才能显示50?

4 个答案:

答案 0 :(得分:2)

您可能正在寻找modf()的{​​{1}}。这会将值拆分为整数部分和小数部分。

<math.h>

然后您可以只打印分数:

double amount = 25.50;
double dollars;
double cents = modf(amount, &dollars);

或者,如果您不再需要小数值:

printf("%.2f", cents);

没有办法仅使用printf("%.2f", modf(amount, &dollars)); 来打印数字的小数部分;你必须修改传递给它的值才能打印,这样它才能看到小数部分。

请注意,您应该在拆分前对该值进行舍入,如chux中的answer所示。

对于许多合理的货币价值,您可以使用printf()或类似的东西 - 但更好的方法是使用cents = amount - (int64_t)amount

注意:还有modf()函数用于计算两个双精度值的模数,fmod()运算符的浮点模拟。)< / p>

此外,不要将%用于实际货币计算 - 至少不是会计风格计算。您可以或多或少地将值高达$ 99,999.99的值可靠地表示为2位小数,但除此之外的任何内容都是不可靠的。 (在一项临时测试中,将float添加到0.01并未更改结果。)如果必须使用浮点数,请使用262144.00

答案 1 :(得分:1)

舍入到最接近的分数 分为整体和分数部分。
打印

 float amount = 25.50;

 amount = roundf(amount*100.0f)/100.0f;
 float dollars, cents;
 cents = modff(amount, &dollars);
 printf("%.0f Dollars  %.0f Cents\n", dollars, cents*100);

舍入对于处理1.996打印量为“1美元100美分”非常重要。

modf()很好地将分数与浮点数的整数部分分开 对modf()使用double

Jonathan Leffler关于使用doublefloat货币相关的资金。

答案 2 :(得分:1)

当你用数字处理钱时,即使它只是你的乐趣的背景,你真的不应该涉及任何浮点数据类型。你应该使用所有整数。甚至没有提到使用float来表示它的不合理性。

例如:

struct money 
{ 
    long dollars, cents;
}

但通常情况下,资金直接来自最小单位:

typedef money long;

代表来自cents的资金。当你想要美元时:

long dollar_part(money m)
{
    return m / 100;
}

美分:

long cent_part(money m)
{
    return m % 100;
}

这样:

money cash;
/* ... */
printf("$ld dollars, $2ld cents", dollar_part(cash), cent_part(cash));

答案 3 :(得分:-1)

一旦你使用mod运算符并获得25,只需从原始值中减去该值,以将剩余的分值作为浮点值。乘以100得到小数。

示例:25.50

方法:

  1. 获取该号码的第一部分(即25
  2. 25.50-25 = .50
  3. .50 * 100 = 50 - &gt;存储在变量中以便以后显示