我有一个双精度数,需要将其转换为小数。如果值太大/太小,结果应该是小数.MaxValue/decimal.MinValue。做这个的最好方式是什么?
问问题
727 次
2 回答
3
我假设您意识到这是一种有损转换,应该尽可能避免吗?如果你真的需要它:
private static readonly double MaxDecimalAsDouble = (double) decimal.MaxValue;
private static readonly double MinDecimalAsDouble = (double) decimal.MinValue;
...
public decimal ConvertWithCap(double input)
{
return input >= MaxDecimalAsDouble ? decimal.MaxValue
: input <= MinDecimalAsDouble ? decimal.MinValue
: (decimal) input;
}
这样,根据double
值检查上限,然后将硬编码的上限值返回为十进制值。这避免了double
无法准确表示的最大值/最小值的问题decimal
。
(即使在 的最大尺度上decimal
,也可以表示连续整数 - 但对于 来说,情况并非如此double
。)
于 2012-09-25T09:43:53.977 回答
0
你认为双倍的大值和小值是多少?我觉得一个简单的 if else 语句就可以完成这项工作
public decimal getDecimal(double value,double large,double small)
{
if(value <= large && value >= small)
return (decimal) value;
else if (value>large)
return decimal.MaxValue;
else
return decimal.MinValue;
}
这只是在网站上输入的,所以请原谅语法和拼写
于 2012-09-25T09:49:37.183 回答