Вопрос о процентных полях в Salesforce. Я знаю, что отдел продаж сохраняет эти значения как двойную точность. Однако кажется, что сохраненное значение представляет собой целое число> 1 вместо 0

Например:

//loanId is a percentage field with value 3%

loan__c l = [select interest_rate_L__c from loan__c where id = :loanId];
system.debug(l.interest_rate_L__c);     //3.000
integer n = 3;
system.debug(l.interest_rate_L__c * n); //9.000
system.debug(l.interest_rate_L__c + n); //6.000

Почему Salesforce обрабатывает процентные поля как полные числа? Это предполагаемая функциональность? Документация заставляет меня поверить, что она сохранится как .03:

Число: положительное или отрицательное число, целое или десятичное.

Валюта: число со знаком валюты.

Процент: число со знаком процента, хранимое как число, деленное на 100.

https://trailhead.salesforce.com/en/content/learn/modules/advanced_formulas/numbers_formulas

Кажется, это число не делится на 100...

Это предполагаемая функциональность? У меня есть какие-то настройки?

1
ZAR 27 Дек 2018 в 22:17
Почему на вопросы, как известно, трудно ответить, граничащие с невозможностью для тех, кто не создавал рассматриваемую функцию.
 – 
Adrian Larson
27 Дек 2018 в 22:13
Больше пытается подтвердить, что это действительно предполагаемое поведение, поскольку в документации указано, что это число, деленное на 100 - я отредактировал вопрос, чтобы более четко спросить, является ли это предполагаемым поведением. Спасибо за ответ.
 – 
ZAR
27 Дек 2018 в 22:15
1
Теперь я также вижу такое же поведение в Salesforce, чего раньше не было. Импортировал данные из Excel в пользовательский объект с полями процентов, значение, например 0,25, стало 0,25% вместо 25%, а 0,035 стало 0,04% вместо 3,5%. Мне пришлось умножить все значения процентных полей на 100, чтобы пользователи могли видеть правильные данные в пользовательском интерфейсе. И выбор полей в Workbench, и вывод в качестве оператора отладки в классе вершины приводят к 25 для 25%, а не 0,25 и 3,5 для 3,5%, а не 0,035. Изменил ли Salesforce что-то для типа данных Percent?
 – 
Nelly Morozova
24 Янв 2020 в 00:56
1
- да, похоже - у меня те же проблемы
 – 
captain_jim1
11 Июн 2020 в 23:04

1 ответ

Salesforce сохраняет значение в виде десятичной дроби (значение/100), но это помогает только в формулах. Если вы хотите использовать значение в Apex, Lightning, Visualforce и т. д., вам нужно разделить процентное поле на 100.

2
sfdcfox 1 Июл 2020 в 20:22
1
Итак, в моем примере кода выше l.interest_rate_L__c + n не должно равняться 6,00, правильно?
 – 
ZAR
27 Дек 2018 в 22:25
1
Предполагая, что процентное поле равно 0,03, результат будет равен 3,03, как и следовало ожидать. Убедитесь, что значения данных верны.
 – 
sfdcfox
27 Дек 2018 в 22:46
1
Но имейте в виду, что если вы сохраните 3.0 в процентном поле, оно будет отображаться как 300% в пользовательском интерфейсе. Всегда проверяйте, с каким типом данных вы работаете.
 – 
sfdcfox
27 Дек 2018 в 22:51
2
Возвращаясь к этому. Я только что столкнулся с той же проблемой и провел тест. У меня есть настраиваемый объект с типом поля «Процент» — я создал запись и ввел 1,1% в качестве значения. В apex, когда я получаю это значение и System.debug полученное значение, оно показывает 1,1 .... если я затем создаю десятичное значение x = 1,1 и сравниваю x с моим извлеченным значением, Apex сообщает мне, что они равны.
 – 
captain_jim1
11 Июн 2020 в 21:16
1
Не уверен, почему я не видел этот комментарий раньше, но позвольте мне построить пример. Я вернусь.
 – 
sfdcfox
1 Июл 2020 в 19:53