我正在使用支付服务,要求将所有费用作为整数提交:
$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 :(得分: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 :(得分:0)
根据我的观点,您的代码是正确的。如果OrderTotal为120.01,则总计= 120.01 * 100 = 12001。
double OrderTotal = 120.01;
int total = Convert.ToInt32(OrderTotal * 100);
答案 2 :(得分:0)
您可以将它乘以100,然后将其转换为
(int)decaimalValue * 100
答案 3 :(得分:-1)
decimal firstDecimal = 120.01M;
private int ConvertDecimalToInt(decimal value, short decimals)
{
if (decimals == 0) return (int)value;
int valueInt = (int)(value * (decimal)Math.Pow(10, decimals));
return valueInt;
}
Console.WriteLine(ConvertDecimalToInt(firstDecimal, 2)); // 12001