2015-11-27 5 views
0

Я хотел бы преобразовать двойной (например, цену со значением 7.90) в целое число без потерь! Я делаю программу, которая обрабатывает деньги, и я должен вводить их в виде двойников, а затем конвертировать их в целые числа, чтобы я мог их выполнить, и, например, когда у меня есть 7,90 евро, и я хочу преобразовать их в центы, это будет выглядеть как 789 центов вместо 790! пожалуйста, помогите мне :) заранее спасибоПреобразование удвоений в целые числа

+0

1) Пожалуйста, создайте полный, минимальный и проверяемый пример, 2) пожалуйста, пометьте, какой язык программирования это – Magisch

+0

@Magisch Я отредактировал его и сказал, что основная проблема –

+0

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

ответ

0
More specificaly the problem is that if it was a double it would originaly save 59.999999 instead of 60 

Тип данных двойные переменные не способны хранить несколько значений точно, 60 является одним из этих значений, так что вы должны либо) использовать другой тип данных (с плавающей точкой страдает те же проблемы), или b) учитывать это, используя допуски в ваших проверках.

В вашем случае переменный показывает 59.9999999 просто потому, что его ближайшее этот тип double данные может получить до 60.

+0

@Magish Итак, что мне делать, чтобы сохранить его как 60? –

+0

@KritonGeorgiou Почему это двойной тип для начала? – Magisch

+0

@Magish Потому что упражнение попросило нас запросить деньги как удвоения, например 0,1 0,5 и т. Д. –

0

Одно из возможных решений:

Не следует использовать число с плавающей точкой на всех. Вместо того, чтобы говорить 1 Euro = 100 * 0.01 Euro, рассчитать с помощью центов: 1 Euro = 100 Cents. Рассчитайте с помощью Cents как целые числа и разделите на 100, если вам нужны евро.

Другая возможность:

При расчете больших сумм денег, где он не будет вписываться в целое число (может быть, даже не в длину), вы используете BigInteger или BigDecimal классов. Это обычный и, вероятно, лучший подход при работе с деньгами. Точность и количество цифр произвольны, но время обработки и использование памяти могут быть выше.

+0

вот что я сделал! Я преобразовал их в центах, чтобы иметь возможность правильно делить числа! проблема в том, что он экономит 60, например, как 59 –

+0

Не думаю, что вы понимаете, что я имею в виду. В вашем вопросе вы говорите о «7,90 евро», и вы вводите их в качестве парных. Невозможно получить ошибки округления, потому что вы не должны получать результат в два раза. Кроме того, я описал два возможных решения, поэтому «это то, что я сделал» представляется мне совершенно неприемлемым. Вы попробовали оба решения? Обратите внимание, что второй - обычный и рекомендуемый подход, как я сказал в своем ответе. –

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