例出一个变量x(decimal类型,小数点后两位)
我如何做到,
1.当变量大于50时,返回值是减去0.1-0.9(随机性取这个区间的值),结果要是小数点后两位的数
2.当变量大于30,小于50时,返回值是减去0.1-0.5(随机性取这个区间的值),结果要是小数点后两位的数
3.当变量大于0,小于30时,返回值是减去0.1-0.3(随机性取这个区间的值),结果要是小数点后两位的数
举例说明:
比如x=60.55
它属于第一种类型,大于50,60.55-随机值为0.3=60.25
例出一个变量x(decimal类型,小数点后两位)
我如何做到,
1.当变量大于50时,返回值是减去0.1-0.9(随机性取这个区间的值),结果要是小数点后两位的数
2.当变量大于30,小于50时,返回值是减去0.1-0.5(随机性取这个区间的值),结果要是小数点后两位的数
3.当变量大于0,小于30时,返回值是减去0.1-0.3(随机性取这个区间的值),结果要是小数点后两位的数
举例说明:
比如x=60.55
它属于第一种类型,大于50,60.55-随机值为0.3=60.25
提问应该把来龙动脉讲清楚
1、是什么表,表里有些什么字段
2、是希望直接通过sql来直接实现,还是通过orm来实现
3、只有大于50和小于50,没有提到等于50的情况(这条可以忽略或许本身需求就是这样的)
那就几种实现情况都说一下
一、通过sql直接实现,以mysql为例
create table test(
number int
);
insert into test values(60),(40),(20);
select
number,
case
when number>50 then round(number-(rand()*0.8+0.1), 2)
when 30<number<50 then round(number-(rand()*0.4+0.1), 2)
when 0<number<30 then round(number-(rand()*0.2+0.1), 2)
end as x
from
test
二、在orm里实现(假设model名是Test,要查询出来的字段名是x)
case_sql = """
case
when number>50 then round(number-(rand()*0.8+0.1), 2)
when 30<number<50 then round(number-(rand()*0.4+0.1), 2)
when 0<number<30 then round(number-(rand()*0.2+0.1), 2)
end
"""
tests = Test.objects.all().extra(
select={'x': case_sql}
)
三、遍历orm结果转换
from random import randint
def convert(number):
stop = 0
if number > 50:
stop = 90
elif 30 < number < 50:
stop = 50
elif 0 < number < 30:
stop = 30
return round(number - randint(10, stop) / 100.0, 2)
lst = [20, 40, 60]
print [convert(_) for _ in lst]
2 回答5.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答972 阅读✓ 已解决
3 回答1.1k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决