2014-10-07 45 views
-5

我使用,要求所有它的指控提交作为一个整体数字作为这样一个支付服务:转换十进制整数不失货币价值

$205.01 submitted as 20501 
$195.43 submitted as 19543 
$42.06 submitted as 4206 

我想这第一:

Convert.ToInt32(OrderTotal * 100); 

但我发现如果OrderTotal = $120.01然后我结束了12000,与数百名的地方四舍五入。我最终想要的是12001。如何在不舍入的情况下执行此转换?

+0

你的意思是你结束了与12000(3个零)或1200(2个零)? – juharr 2014-10-07 16:08:30

+2

do'Convert.ToInt32(OrderTotal.ToString()。Replace(“。”,“”))':P – Habib 2014-10-07 16:09:48

+0

'OrderTotal'变量的类型是什么? – admdrew 2014-10-07 16:10:06

回答

3
decimal firstDecimal = 120.01M; 
double firstDouble = 120.01; 
float firstFloat = 120.01F; 

Console.WriteLine ((int)(firstDecimal * 100)); // 12001 
Console.WriteLine ((int)(firstDouble * 100)); // 12001 
Console.WriteLine ((int)(firstFloat * 100)); // 12001 

Console.WriteLine (Convert.ToInt32(firstDecimal * 100)); // 12001 
Console.WriteLine (Convert.ToInt32(firstDouble * 100)); // 12001 
Console.WriteLine (Convert.ToInt32(firstFloat * 100)); // 12001 

这意味着一件事情....你有其他事情你的代码出错了。

编辑: Convert.ToInt32产生完全相同的结果

+1

这不是一个有效的结论。投射到int并使用Convert.ToInt32()不等效操作。第一轮截断,第二轮使用银行家四舍五入。 – 2014-10-07 16:35:27

+0

一个正在铸造,另一个正在转化,但在这种情况下,它确实没有什么区别。 @CleverNeologism – 2014-10-07 17:41:04

0

你的代码是按我的看法是正确的。如果是的OrderTotal然后120.01总= 120.01×100 = 12001.

double OrderTotal = 120.01; 
int total = Convert.ToInt32(OrderTotal * 100); 
0

你可以乘以100就再投它作为它

(int)decaimalValue * 100