2015-10-02 3 views
0

У меня есть ячейка, содержащая число с шестью десятичными разрядами, и я хочу назначить ее ячейке другой рабочей таблицы с точностью до 5 знаков после запятой. Я использую одну и ту же переменную дважды, и она работает правильно при первом назначении, но во время второго оператора присваивания значения Cells Value двойной переменной значение округляется до четырех десятичных знаков автоматически. У меня нет опции Excel, чтобы использовать отображаемый precisoin включен.Значение округления ячейки Excel 2013 при назначении с плавающей запятой

Dim i As Long, x As Long, round_prc As Double 
Dim WSTarget As Worksheet 

     'OE Price 
     round_prc = Round(.Cells(3 + x, 9).Value, 5) ; six decimals assigned to 5 decimals 
     WSTarget.Cells(1 + i, 10).Value = round_prc 

     'New Price 
     round_prc = .Cells(3 + x, 13).Value  ; six decimals assigned to 4 decimals?????? 
     round_prc = Round(.Cells(3 + x, 13).Value, 5) 
     WSTarget.Cells(1 + i, 12).Value = round_prc 

ОБНОВЛЕНИЕ: Формат ячеек отличается от цены OE и новой цены. Новая цена включает $. Когда я удаляю $, назначение больше не округляется. Почему валюта автоматически округляется до 4 знаков после запятой? Может ли это объяснить?

+0

Под '' Новая цена', почему вы дважды назначаете round_prc? Почему бы просто не назначить его один раз таким же образом, как вы его назначили в разделе «Цена OE»? Может быть, что первое присваивание по какой-то причине обрезает переменную до 4 десятичных знаков, а затем не осталось 5 десятичных знаков, оставшихся до раунда, во второй раз, когда вы назначаете переменную. –

+0

Я добавил первую проверку, чтобы проверить значение во время сеанса отладки. Оба назначения округляют значение в round_prc до 4 знаков после запятой. Благодарю. –

+0

Поскольку вы добавили информацию о том, что она отформатирована в формате валюты, похоже, что вы должны использовать 'Value2' вместо' Value'. Я просто искал информацию об этом, и это может быть полезно: http://stackoverflow.com/questions/17359835/what-is-the-difference-between-text-value-and-value2 –

ответ

2

Я решил свою проблему. Тот факт, что ячейка была сформирована как валюта, вынудила значение. Округлить до 4 знаков после запятой. Не существует такого ограничения для свойства .Value2. Таким образом ....

 'OE Price    a general formatted cell 
     round_prc = Round(.Cells(3 + x, 9).Value, 5) 'rounded only by the function 
     WSTarget.Cells(1 + i, 10).Value = round_prc 


     'New CCA Price   a currency formatted cell 
     round_prc = .Cells(3 + x, 13).Value   'rounded to 4 decimals 
     round_prc = .Cells(3 + x, 13).Value2   'Not rounded 
     round_prc = Round(.Cells(3 + x, 13).Value2, 5) 
     WSTarget.Cells(1 + i, 12).Value = round_prc 

Я надеюсь, что это поможет другим, которые могут столкнуться с этой проблемой.

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