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

本文关键字:货币 十进制 转换 整数 | 更新日期: 2023-09-27 18:25:46

我使用的支付服务要求将所有费用作为整数提交,如下所示:

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

我首先尝试了这个:

Convert.ToInt32(OrderTotal * 100);

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

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

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产生完全相同的结果

根据我的视图,您的代码是正确的。如果OrderTotal为120.01,则total=120.01*100=12001。

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

您可以将其乘以100,然后将其转换为it

(int)decaimalValue * 100
    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