使用 c# 设置自动计算数字的比例和精度

Posted

技术标签:

【中文标题】使用 c# 设置自动计算数字的比例和精度【英文标题】:To set scale and precision of a auto calculated number using c# 【发布时间】:2017-04-27 11:41:30 【问题描述】:

我有一种方法可以根据用户输入自动计算金额。 我的要求是将该数字的比例设置为 4。例如,如果金额为 49,则应返回 49.0000。如果金额为 49.2412412414,则应返回 49.2412。我使用了 Math.Round(),但它不适用于示例 1。即它无法将 49 转换为 49.0000。我的示例代码:

    private decimal getAmount(decimal rate)
    
        decimal Amount = 0;
        Amount = 12 * rate;
        return Math.Round(Amount, 4);
    

【问题讨论】:

【参考方案1】:

您可以将金额乘以1.0000M 以获得所需的结果。你的代码是这样的:

private decimal getAmount(decimal rate)

    decimal Amount = 0;
    Amount = 12 * rate;
    Amount *= 1.0000M;
    return Math.Round(Amount, 4);

但是,如MSDN中所述:

尾随零不影响十进制数的值 算术或比较运算。但是,尾随零可能是 如果有适当的格式字符串,则由 ToString 方法显示 已应用。

因此,49 实际上等于 49.0000,但是如果您想要该值的字符串表示形式,您可以将函数更改为以下内容:

private static string  getAmount(decimal rate)

    decimal Amount = 0;
    Amount = 12 * rate;
    return Amount.ToString("#.0000", CultureInfo.InvariantCulture);

【讨论】:

我希望它以十进制形式返回。第一个解决方案似乎也不起作用。 你的意思是你没有得到精度? 没有。不影响人数【参考方案2】:

您必须区分数字表示和字符串表示。 decimal 将忽略任何尾随零。但是,如果将小数转换为 string,则可以强制显示尾随零。

decimal amount = 49.0M;
var rounded = Math.Round(amount, 4);
string display = rounded.ToString("#.0000", CultureInfo.InvariantCulture); // "49.0000"

【讨论】:

以上是关于使用 c# 设置自动计算数字的比例和精度的主要内容,如果未能解决你的问题,请参考以下文章

检测 Oracle 数字数据类型的实际精度和比例

lua中精度计算

如何解释数据库中数字的精度和比例?

验证数字精度/比例

具有任意精度和一定比例的数字格式的 Oracle to_char 函数

NSDecimalNumber 值的比例和精度