C# 为什么我会得到不同的小数点?

C# 为什么我会得到不同的小数点?,c#,decimal,C#,Decimal,我创建了一个包含多个字段的结构。 在该结构中,我有一个属性,该属性调用一个方法,然后该方法从这些数字中创建一个字符串用于日志记录。 当我在结构中使用属性时,与直接调用创建日志字符串的实际方法时相比,我得到了不同的小数点 假设我有9990M,如果我使用这个结构,它是9990.0000,当我直接调用这个方法时,它会打印9990.00 这是我的方法: private static string CreateLog( long userId, decimal amount, long t

我创建了一个包含多个字段的结构。
在该结构中,我有一个属性,该属性调用一个方法,然后该方法从这些数字中创建一个字符串用于日志记录。
当我在结构中使用属性时,与直接调用创建日志字符串的实际方法时相比,我得到了不同的小数点
假设我有9990M,如果我使用这个结构,它是9990.0000,当我直接调用这个方法时,它会打印9990.00

这是我的方法:

private static string CreateLog(
    long userId, decimal amount,
    long transactionID, decimal totalCash)
{


    Values = string.Format("{0}{1}{2}{3}",
                            amount,
                            userId,
                            transactionId,
                            totalCash);
    return Values;
}
我的结构是这样的:

public struct AccountStruct
        {
            public long USER_ID;
            public decimal AMOUNT;
            public long TRANSACTION_ID;
            public decimal CURRENT_CASH;
            string ValuesToBeLoged
            {
                get
                {
                   return CreateLog(this);
                }
            }

        }
CreateLog如下所示(调用前一个方法)


为什么是这样?这里有什么问题?

可能正在进行某种内部规范化。如果您关心这些问题,则需要在ToString或String.Format方法中指定小数位数


查找Decimal.ToString(字符串)中的选项。通常我使用“Nx”,其中x是小数位数。

我使用Fx而不是Nx,因为我不需要分隔符。再次感谢,但我想知道到底是什么原因导致了这种差异。实际上,十进制值可以存储为9990 x 10^0或999 x 10^1或99900 x 10^1。您必须阅读规范并检查原始内存,以便准确地确定它何时从一个版本转换到另一个版本。(或者完全是别的东西。)非常感谢,我来看看
private static string CreateLog(AccountStruct accinfo)
        {
            return CreateLog(  accinfo.USER_ID,
                               accinfo.AMOUNT,
                               accinfo.TRANSACTION_ID,
                               accinfo.CURRENT_CASH);
        }