刚刚开始C.例如给出数字浮动$ 25.50。我想分别显示美元和美分。因此,对于美元,我可以使用%.0f来显示25.我怎么才能显示50?
答案 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关于使用double
与float
货币相关的资金。
答案 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
方法:
25
)25.50-25 = .50
.50 * 100 = 50
- &gt;存储在变量中以便以后显示