使用 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# 设置自动计算数字的比例和精度的主要内容,如果未能解决你的问题,请参考以下文章