2010-09-30 5 views

ответ

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) 
} 

выше psuedocode заполнит listofvaluepairs с парами цифры и числа умножить на , Так что вы получите это:

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

И дробная часть имеет ту последнюю часть, которую Вы хотели.

Для справки, функция floor() даст номер без дробной части, поэтому пол (1,6) дает 1. % (modulo) operator будет более или менее отдавать остаток после деления. Таким образом, 7% 2 = 1.

Что я делаю в приведенном выше примере (это очень не java-код), получает по одной цифре за раз от значения.

Так я начинаю с 125:

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

Тогда я повторяю, чтобы получить 2 и 1. В то же время я спасительной 1, 10 и 100 с помощью переменной экспоненты.

+0

ничего себе, что было блестящим. Не могли бы вы объяснить математику за этим. потому что я собирался сделать это долгий путь. который должен был преобразовать число в строку, затем разбить число вверх и начать, а затем делать некоторые следующие длинные вещи со строкой. который, как я знал, был бы неправильным способом решить его в любом случае. но как работают ваши математики? им не знакомы с такими словами, как показатель экспоненты и пола, и так далее. не могли бы вы рассказать мне, как работает ваш код? спасибо .. причина, почему это потому, что я хочу понять логику, стоящую за ней, поэтому я могу применить ее в другом месте, а не просто копировать и вставлять ее. – Pavan

+0

@JoshD: Вы полностью пропустили десятичную часть, приятель. –

+0

@ Adeel Ansari: он находится в «дробной части». Это вторая строка. (Имейте в виду, что это psuedocode.) – JoshD

0

Вы можете получить каждую цифру с помощью модуля или % оператора в цикле для целочисленных значений (то есть: int ones = myVal % 10), и получить дробное значение сделать float fraction = val - (int)val;

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 

Конечно, вы можете изменить код, чтобы добавить материал в структуру данных.

+2

+1. Кстати, вы, люди, должны воздерживаться от выполнения своих заданий, особенно когда вы не видите никаких усилий с их стороны. –

+1

Если кто-то хочет ответить на домашнюю работу парня, это нормально. OP может легко узнать больше, видя чей-то правильный ответ, а не писать хардкоры, которые вы делаете в школе. Все зависит от того, что он хочет выбраться из этого. –

+0

@ Андрю Хаббс: Вы не можете просто научиться, наблюдая, как кто-то плавает. Аналогия здесь тоже подходит, ИМО. Таким образом, они должны попытаться выйти с кодом, независимо от того, взломщик. По крайней мере, поставите свой мозг на работу и попытайтесь решить проблему. Его хорошо понять, читая чужой код. Но писать собственный код - это совсем другой опыт. И я считаю, что эти хитроумные люди действительно дают вам некоторые ценные навыки. –

Смежные вопросы