将十进制转换为整数而不会丢失货币值

时间:2014-10-07 16:06:08

标签: c# integer type-conversion decimal rounding

我正在使用支付服务,要求将所有费用作为整数提交:

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

我先试了这个:

Convert.ToInt32(OrderTotal * 100);

但我发现如果OrderTotal = $120.01那么我最终得到了12000,其中有数百个地方四舍五入。我最终想要的是12001。如何在不进行舍入的情况下执行此转换?

4 个答案:

答案 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