[ТЕМА ЗАКРЫТА]
Опции темы
29.05.2014 04:34  
Tiger
Не знаю правильно ли обозвал тему! Но суть вот в чем есть код:
Цитата:
for i = 0, __item.properties:size() - 1 do
local property = __item.properties:at(i);
if (ukm.binary(property.flags) *
ukm.binary(ukm.item_property.flgprint)):get() ~= 0 then
local property_name = property.code;
if property.name ~= nil then
property_name = property.name:get();
end
text = text .. ukm.adjustment(" " .. property_name, property.value .. " ", width, ".") .. "\n";

Сюда вставляю свой код!

end
end
Пытаюсь добавить

Цитата:
if property_name == 'Сумма' then
sum = property.value:get();
commission = property.value - property.value * 0.04;
end
if property_name == 'Номер телефона' then
text = text .. ukm.adjustment("Сумма с комиссией (4%)",commission .. " ", width, ".") .. "\n";
end
Проблема в следующем кода property.value целое число всё отрабатывает без ошибок, стоит значение поставить дробным (через точку с копейками) получаю ошибку
Цитата:
ReceiptAppendPayment: [string "receipt.lua"]:156: attempt to perform arithmetic on field 'value' (a string value)
Проверяю тип property.value - string. Если в качестве эксперимента поставить вместо property.value значение 15.20, тоже все без ошибок. Как преобразовать property.value?

Версия УКМ 52 sp1!
 
29.05.2014 07:54  
OlegON
Значительно сузил круг отвечающих только до тех, кто пользуется УКМ4 твоей версии.
Трудно было выдрать весь нужный тебе кусок и выделить, в какой строке ошибка?
Не вижу, где у тебя определяется property, накидал просто кусок кода
Код:
#!/usr/bin/lua
val = "String";
val = "7";
comission = val - val * 0.04;
print (comission);
все работает, что не так? Очень не люблю неявное приведение типов, от него много бед, т.е. рекомендую val завернуть в tonumber.
 
29.05.2014 08:55  
student
Цитата:
Сообщение от Tiger
Проблема в следующем кода property.value целое число всё отрабатывает без ошибок, стоит значение поставить дробным (через точку с копейками) получаю ошибку
можно и без объявления сделать - считать все в копейках (как в сбере) - т.е. добавить умножение на 100 и потом выводить результат деленный на 100 :)

хотя Олег прав

Цитата:
Сообщение от OlegON
Очень не люблю неявное приведение типов, от него много бед
 
29.05.2014 11:04  
Tiger
Цитата:
Сообщение от OlegON
Значительно сузил круг отвечающих только до тех, кто пользуется УКМ4 твоей версии.
Трудно было выдрать весь нужный тебе кусок и выделить, в какой строке ошибка?
Не вижу, где у тебя определяется property, накидал просто кусок кода
Код:
#!/usr/bin/lua
val = "String";
val = "7";
comission = val - val * 0.04;
print (comission);
все работает, что не так? Очень не люблю неявное приведение типов, от него много бед, т.е. рекомендую val завернуть в tonumber.
Попробовал, с целым числом всё без ошибки, а если поставить val = "7.5" то ошибка, если "7,5" ошибка уходит!
 
29.05.2014 11:29  
OlegON
Логично, преобразование происходит с учетом локали. У меня, например, при "," ошибка появляется, поэтому

Код:
#!/usr/bin/lua
val = "String";
val = "7,5";
val = string.gsub(val,",",".");
comission = val - val * 0.04;
print (comission);
ты разберись, какие локали могут быть, а то там и пробелы и запятой тысячи отделять могут в разных локалях... Надо фиксировать, что может прилететь.
 
"Спасибо" OlegON от:
29.05.2014 13:37  
student
Цитата:
Сообщение от OlegON
Надо фиксировать, что может прилететь.
либо оставить на усмотрение системы и умножать\делить на 100 с неявным приведением типов :)
 
29.05.2014 13:43  
OlegON
Так у него с локалью проблемы, как он на 100 умножит?
 
29.05.2014 13:46  
Mtirt
А нельзя вернуться к первоначальному предложению и использовать tonumber() ?
 
29.05.2014 13:52  
OlegON
Все бы хорошо, но при каше с региональными настройками, когда вместо десятичного разделителя используется то запятая, то точка, это не поможет...
 
29.05.2014 14:05  
Tiger
Цитата:
Сообщение от OlegON
Логично, преобразование происходит с учетом локали. У меня, например, при "," ошибка появляется, поэтому

Код:
#!/usr/bin/lua
val = "String";
val = "7,5";
val = string.gsub(val,",",".");
comission = val - val * 0.04;
print (comission);
ты разберись, какие локали могут быть, а то там и пробелы и запятой тысячи отделять могут в разных локалях... Надо фиксировать, что может прилететь.
Вставляю скрипт этот пример, на выходе получаю вместо 7.5 (...) три точки! Чего не так?

Получается на кассе в форме ввожу сумму через точку, а чтобы в скрипте выполнить расчет необходимо чтобы тоже значение было с запятой!
 
 


Опции темы



Часовой пояс GMT +3, время: 15:04.

Все в прочитанное - Календарь - RSS - - Карта - Вверх 👫 Яндекс.Метрика
Форум сделан на основе vBulletin®
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.