有效地将float转换为int

时间:2017-01-09 16:01:05

标签: c

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?

3 个答案:

答案 0 :(得分:4)

如果您正在编写一个需要精确的资金计划,请不要首先使用花车。将所有内容存储为整数分美分。如果需要浮点数(通常可能是double而不是float) - 比如利率可能 - 你需要制定符合机构规则的规则,这些规则可能会也可能不会简单的四舍五入。

答案 1 :(得分:0)

避免在floatint之间更改用于代表资金的类型。

float totalAmount;  
int totalAmountCents;
...
totalAmountCents = totalAmount * 100;

Money special issues涉及精确性,范围和功能,不仅仅适用于复杂的税收和利率计算等整数。随着偶然类型的转换,这些问题更加严重。

要学习,请从最小单位金额的intlong开始,并特别注意四舍五入。

如果需要浮点类型,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添加到浮点数。

这也是你在数学方面的表现。