将十进制转换为整数而不丢失货币值
本文关键字:货币 十进制 转换 整数 | 更新日期: 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