有效地将十进制移位应用于所有数字的算法

时间:2018-02-02 18:14:39

标签: algorithm math numerical

我正在建立一个以钼为输入的化学模型,但是离散地模拟分子(即每个分子是一个实体)。因此,我需要能够将比例计算为整数。例如,如果我有0.01摩尔的 A 和0.002摩尔的 B ,我会将其扩展到10个单位的 A 和2个单位的< EM>乙。但是,这段代码非常不优雅,并假设所有的摩尔数都小于1.0,即

// Find the exponent to offset the value
NumberFormat format = new DecimalFormat("0.#E0");       
String value = format.format(smallest);
int exponent = Integer.parseInt(value.substring(value.indexOf("E") + 1));

// Scale to whole numbers
exponent = Math.abs(exponent) + 1;
for (int ndx = 0; ndx < input.size(); ndx++) {
    input.get(ndx).count = (long)(input.get(ndx).mols * Math.pow(10, exponent)); 
}

是否有一种有效的算法可以对任意输入执行十进制移位(例如,1.1摩尔的 A ,0.11摩尔的 B ,0.001摩尔的 C 获得1100个 A 单位,110个 B 单位和1个 C 单位?

1 个答案:

答案 0 :(得分:1)

Algorithm for simplifying decimal to fractions开始,将小数比率变为分数,分数就是你的答案。