3

我有一个双精度数,需要将其转换为小数。如果值太大/太小,结果应该是小数.MaxValue/decimal.MinValue。做这个的最好方式是什么?

4

2 回答 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 回答