我正在做一个使用很多公式的计算项目。这些公式是为度量单位(UOM)定义的,其中包含许多常量。因此,如果您在公制 UOM 中提供任何数据(如 kg、mm、km/h),它将给出结果。但作为增强功能,我们需要引入一个可以接受英文 UOM 数据的功能(如 lb,in,mph)。
现在我们尝试使用相同的公式,但它有很多基于公制 UOM 定义的常量。因此计算的值不匹配,无法更改或重新定义基于英文 UOM 的规则引擎。这可能需要很长时间,并且需要大量的批准等。我们不能更改配方上的任何东西。因此,我们将输入的英制 UOM 值转换为公制单位并执行计算。但与预期结果存在一定偏差。
我认为这个问题可能是由于转换因素。例如:如果我转换1kg (Metric UOM)
为English UOM (pound)
. 它会给周围的2.20462
。但是当我Metric
再次将其转换为时,我得到0.9999988107
. 所以最终的计算结果在使用相同的数据进行计算时会有所不同。有什么好的方法来处理这个。
提前感谢您的任何想法。
C# 代码
public const double KG_LBS = 2.205;
public const double LBS_KG = (1/KG_LBS);
static double ConvertKgsToLbs(string strInputValue, bool boolRoundWholeNum = false)
{
double dblInputValue = Convert.ToDouble(strInputValue);
double dblResult = dblInputValue * KG_LBS;
if (boolRoundWholeNum == true) dblResult = dblResult.WholeNumberRoundOff();
return dblResult;
}
static double ConvertLbsToKgs(string strInputValue, bool boolRoundWholeNum = false)
{
double dblInputValue = Convert.ToDouble(strInputValue);
double dblResult = dblInputValue * LBS_KG;
if (boolRoundWholeNum == true) dblResult = dblResult.WholeNumberRoundOff();
return dblResult;
}
计算错误就是这样发生的。
1 公斤 = 2.20462 磅 --1
2.20462 磅 = 0.9999988107 公斤 --2
0.9999988107 公斤 = 2.20461999989109 磅 --3
第 1 步,我做了第一次从 kg 到 lb 的转换。在第 2 步中,我做了从 lb 到 kg 的重新转换。价值不一样。它不是 1,而是它的0.9999988107
. 如果我进行一轮,我将得到1
如果我正在处理公式中的值。res=(重量*10)+200g
res= (1kg*10)+200g= 10.2kg -- 当 Kg=1 res= (0.9999988107kg*10)+200g= 10.199kg -- 这些变化会影响进一步的计算。
如果您有任何减少这种情况的想法,请分享。