2

我希望执行以下操作:假设我有一个像 125.625 这样的数字 => 我希望能够告诉我的程序是 1 * 100 + 2 * 10 + 5 * 1 + 0.625。请问我该怎么做?

谢谢

4

3 回答 3

3

如果您将数字作为整数,则可以执行以下操作:

value := 125.625
fractional part := value % 1
value := floor(value)

exponent = 1
listofvaluepairs = array()
while(value > 0)
{
  tmp_part := value % 10
  listofvaluepairs.add(value, exponent)
  exponent = exponent * 10
  value = floor(value / 10)
}

上面的伪代码将使用成对的数字和要乘以的数字来填充 valuepairs 列表。所以你会得到这个:

{{1,100}, {2,10}, {5,1}}

小数部分有你想要的最后一块。

作为参考, floor() 函数将给出不带小数部分的数字,因此 floor(1.6) 给出 1。%(模)运算符或多或少给出除法后的余数。所以 7%2 = 1。

我在上面的例子中所做的(这不是java 代码),每次从值中获取一个数字。

所以我从 125 开始:

125 % 10 = 5
Then:
floor(125 / 10) = floor(12.5) = 12

然后我重复得到 2 和 1。同时我使用指数变量保存 1、10 和 100。

于 2010-09-30T04:14:12.273 回答
3
double num = 125.625;
System.out.print(num - (int)num);
num = (int) num;

for (int i=10; num!=0; i*=10) {
    System.out.print(" + " + i/10 + " * " + (num % i)/i*10);
    num -= num % i;
}

将打印:

0.625 + 1 * 5.0 + 10 * 2.0 + 100 * 1.0

当然,您可以更改代码以将内容添加到数据结构中。

于 2010-09-30T04:17:05.437 回答
0

%您可以通过在整数值(即:)的循环中使用模或运算符来获取每个数字int ones = myVal % 10,并获取小数值float fraction = val - (int)val;

于 2010-09-30T04:14:49.620 回答