float totalPurchaseAmount, totalPurchaseTax,totalShippingCharge, totalShippingTax, totalGiftWrapCharge, totalGiftWrapTax, totalAmount;
int totalAmountCents;
totalAmount = totalPurchaseAmount + totalPurchaseTax + totalShippingCharge + totalShippingTax + totalGiftWrapCharge + totalGiftWrapTax ;
/* The %.2f formatting string limits the output to 2 decimal places */
lr_output_message("total %.2f", totalAmount);
lr_output_message("total %.2f",totalAmount );o/p=totalAmount = 569.97
totalAmountCents = totalAmount * 100;
lr_output_message("total cents %f",totalAmountCents);
o/p=totalAmountCents=56996
(但我需要打印56997而不是56996,我的意思是确切的值但是作为int)
如何更改程序以便有效地将float更改为int?
答案 0 :(得分:4)
如果您正在编写一个需要精确的资金计划,请不要首先使用花车。将所有内容存储为整数分美分。如果需要浮点数(通常可能是double
而不是float
) - 比如利率可能 - 你需要制定符合机构规则的规则,这些规则可能会也可能不会简单的四舍五入。
答案 1 :(得分:0)
避免在float
和int
之间更改用于代表资金的类型。
float totalAmount;
int totalAmountCents;
...
totalAmountCents = totalAmount * 100;
Money special issues涉及精确性,范围和功能,不仅仅适用于复杂的税收和利率计算等整数。随着偶然类型的转换,这些问题更加严重。
要学习,请从最小单位金额的int
或long
开始,并特别注意四舍五入。
如果需要浮点类型,float
很少是一个不错的选择。不要使用整数转换来舍入。使用rint()
或round()
double totalAmount;
double totalAmountCents;
...
totalAmountCents = rint(totalAmount * 100);
如果绝对需要转换为int
,请使用浮点舍入功能进行舍入,然后转换或使用lrint()
。
#include <math.h>
totalAmountCents = rint(totalAmount * 100);
int iCents = (int) totalAmountCents;
// or
long LCents = lrint(totalAmount * 100);
答案 2 :(得分:-1)
在将其转换为int之前将0.5添加到浮点数。
这也是你在数学方面的表现。