Java中如何将一个数字分成不同的部分?
-
26-09-2019 - |
题
我希望执行以下操作:假设我有一个像 125.625 这样的数字 => 我希望能够告诉我的程序是 1 * 100 + 2 * 10 + 5 * 1 + 0.625。请问我该怎么做?
谢谢
解决方案
如果你的数字是整数,你可以这样做:
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)
}
上面的伪代码将用数字和要乘以的数字对填充值对列表。所以你会得到这个:
{{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。
其他提示
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
当然,你可以更改代码以东西添加到数据结构中。
可以通过使用在用于整数值的环路模或%
操作者(即:int ones = myVal % 10
)得到每个数字,并获得所述分数值做float fraction = val - (int)val;
不隶属于 StackOverflow