Гость
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Неверное округление / 10 сообщений из 10, страница 1 из 1
13.05.2013, 09:59
    #38254798
d.v.kramarenko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неверное округление
Всем доброго времени суток. Уже обращался к вам за помощью вот снова неполадки. Имеется программа для ввода путевых листов написанная в Power Builder 9.0, база данных Sybase ASA 7.0.3.2054. При обработке следущего скрипта в отчете кое-где не верно округляются числа.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
 SELECT "waylist_tech"."date_input_tech",   
         "tech_transport"."garage_number",
			"type_loader"."Type_Loader",   
			isnull("smen_point"."id_type_loader",1) as id_loader,         
			"load_point_ref_book"."ekg_name",   
         "unload_point_ref_book"."fall_name",   
         "rock_type_ref_book"."type_rock",   
         "smen_point"."number_trip" as trip, 
          "waylist_tech"."regime_of_work" as id_regim,
         round("smen_point"."middle_distance",2) as dist,   
         "cor_coefficient"."coeff_corr_temp" as k1,   
         ((Minutes(datetime('00:00:00'),"smen_point"."time_on_factory"))/[color=red]60.00[/color]) as time_fact,   
         "cor_coefficient"."coeff_corr_use" as k2,   
         "cor_coefficient"."tarif" ,
     
 (select "dba"."way_length"."mid_length"
    from "dba"."way_length"
   where ( "dba"."load_point_ref_book"."id_load_point" = "dba"."way_length"."id_load_point" ) and  
         ( "dba"."unload_point_ref_book"."id_unload_point" = "dba"."way_length"."id_unload_point" ) and  
         ( "dba"."rock_type_ref_book"."id_rock" = "dba"."way_length"."id_rock" ) and
         ("dba"."way_length"."middle_distance"=dist) and
         ( ( "dba"."way_length"."date_input_length" >= DATEFORMAT("waylist_tech"."date_input_tech",'yyyy-mm-01')))) as midl_length1 ,

(select ("dba"."way_length"."coeff_corr")
    from "dba"."way_length"
   where ( "dba"."load_point_ref_book"."id_load_point" = "dba"."way_length"."id_load_point" ) and  
         ( "dba"."unload_point_ref_book"."id_unload_point" = "dba"."way_length"."id_unload_point" ) and  
         ( "dba"."rock_type_ref_book"."id_rock" = "dba"."way_length"."id_rock" ) and
        ("dba"."way_length"."middle_distance"=dist) and("dba"."way_length"."middle_distance"=dist) and  
         ( ( "dba"."way_length"."date_input_length" >= DATEFORMAT("waylist_tech"."date_input_tech",'yyyy-mm-01') ) )) as k3 ,
  
     k1*k2*k3 as k,
     nsi_on_trips(0,id_regim,dist+midl_length1,id_loader)as id_min,
     nsi_on_trips(1,id_regim,dist+midl_length1,id_loader)as id_max,
     nsi_on_trips_pr((select isnull(nsi_way_length.NSI_LENGTH ,0) from "dba".nsi_way_length  where (nsi_way_length.id_nsi_way_length=id_min and nsi_way_length.id_type_loader=id_loader)),
(select isnull(nsi_way_length.NSI_LENGTH ,0) from "dba".nsi_way_length  where (nsi_way_length.id_nsi_way_length=id_max and nsi_way_length.id_type_loader=id_loader)),
(select isnull(nsi_way_length.nsi_num_trip ,0) from "dba".nsi_way_length  where (nsi_way_length.id_nsi_way_length=id_min and nsi_way_length.id_type_loader=id_loader)),
       (select isnull(nsi_way_length.nsi_num_trip ,0) from "dba".nsi_way_length where (nsi_way_length.id_nsi_way_length=id_max and nsi_way_length.id_type_loader=id_loader)),
      (dist+midl_length1))  as n_midl,
       [color=red]round(n_midl,2) as n_mid,[/color]
      [color=red] round(n_mid*k,2) as n_mid1,[/color]
       round(tarif*11/n_mid1,2) as sale_trip,
       round(time_fact*tarif,2) as zarp_fact,  
		 round(isnull(zarp_fact,2),2) +
		isnull((SELECT (round(isnull(round(tarif*11/n_mid1,2)*trip,0),2))WHERE isnull(time_fact,0)=0),0) as zarp
         


    FROM "waylist_tech",   
         "tech_transport",
			"type_loader",   
         "smen_point",   
         "load_point_ref_book",   
         "unload_point_ref_book",   
         "rock_type_ref_book",
         "density_rock_ref_book",
         "cor_coefficient"  
   WHERE ( "tech_transport"."id_automobile_t" = "waylist_tech"."id_automobile_t" ) and  
         ( "smen_point"."number_waylist_t" = "waylist_tech"."number_waylist_t" ) and
			( "type_loader"."id_Type_Loader"= isnull("smen_point"."id_type_loader",1)) and 
         ( "load_point_ref_book"."id_load_point" = "smen_point"."id_load_point" ) and  
         ( "unload_point_ref_book"."id_unload_point" = "smen_point"."id_unload_point" ) and 
         ( "smen_point"."id_density_rock" = "density_rock_ref_book"."id_density_rock" ) and   
         ( "rock_type_ref_book"."id_rock" = "density_rock_ref_book"."id_rock" ) and  
         ( "smen_point"."id_density_rock" = "density_rock_ref_book"."id_density_rock" ) and
         (("cor_coefficient" ."data_corr"= DATEFORMAT("waylist_tech"."date_input_tech",'yyyy-mm-01')) AND ( "waylist_tech"."date_input_tech" <= :dat2 ))and
         (( "waylist_tech"."date_input_tech" >= :dat1 ) AND  
         ( "waylist_tech"."date_input_tech" <= :dat2 ))
 
          
ORDER BY "tech_transport"."garage_number" ASC,   
        	"smen_point"."id_type_loader" asc,
			"load_point_ref_book"."ekg_name" ASC,
         "unload_point_ref_book"."fall_name" ASC,   
         "rock_type_ref_book"."type_rock" ASC   



Там где 60.00 я не пойму для чего после 60 нули.
...
Рейтинг: 0 / 0
13.05.2013, 11:33
    #38254960
Nashville
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неверное округление
d.v.kramarenko,

нули после запятой (точки) определяет тип данных после операции деления. Для примера посмотрите разницу в результатах для следующих запросов
1. select 1/3
2. select 1/3.0
...
Рейтинг: 0 / 0
13.05.2013, 11:49
    #38254994
d.v.kramarenko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неверное округление
Nashville, ясно, спасибо! Вот только с округлением пока что так и не дал ума.
...
Рейтинг: 0 / 0
13.05.2013, 12:55
    #38255140
Nashville
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неверное округление
d.v.kramarenko,


Вы имеете ввиду

Код: sql
1.
2.
round(n_midl,2) as n_mid,
round(n_mid*k,2) as n_mid1,



А что здесь не понятно? Посмотрите на Sybooks Online описание ROUND() и FLOOR() или CEILING().
...
Рейтинг: 0 / 0
13.05.2013, 16:15
    #38255410
d.v.kramarenko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неверное округление
Nashville,

Про округление все понятно. Просто 20.10*0,95=19,095 при округлении до двух по идее должно быть 19,10 а получается 19,09.
...
Рейтинг: 0 / 0
13.05.2013, 16:17
    #38255416
d.v.kramarenko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неверное округление
Nashvill,
numeric
...
Рейтинг: 0 / 0
13.05.2013, 16:41
    #38255456
Nashville
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неверное округление
d.v.kramarenko,

Запрос
Код: sql
1.
select round((20.10 * 0.95), 2)


выдает результат 19.1, поэтому смотрите какой тип имеют поля n_mid и k.
...
Рейтинг: 0 / 0
13.05.2013, 18:04
    #38255590
d.v.kramarenko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неверное округление
Nashville,
"cor_coefficient"."coeff_corr_temp" as k1; "cor_coefficient"."coeff_corr_use" as k2;
(select ("dba"."way_length"."coeff_corr")
from "dba"."way_length"
where ( "dba"."load_point_ref_book"."id_load_point" = "dba"."way_length"."id_load_point" ) and
( "dba"."unload_point_ref_book"."id_unload_point" = "dba"."way_length"."id_unload_point" ) and
( "dba"."rock_type_ref_book"."id_rock" = "dba"."way_length"."id_rock" ) and
("dba"."way_length"."middle_distance"=dist) and("dba"."way_length"."middle_distance"=dist) and
( ( "dba"."way_length"."date_input_length" >= DATEFORMAT("waylist_tech"."date_input_tech",'yyyy-mm-01') ) )) as k3;
k1*k2*k3 as k
Вроде все проверял
Сейчас уверять не буду, но вроде все поля numeric. Перепроверить смогу только завтра.
...
Рейтинг: 0 / 0
15.05.2013, 03:32
    #38257502
d.v.kramarenko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неверное округление
Ну как так-то? Попробовал заменить round на floor(n1*100+0.500001)/100. Все равно без толку. Где нормально округляет, а где нет.
...
Рейтинг: 0 / 0
03.06.2013, 22:43
    #38284420
escapist
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неверное округление
d.v.kramarenko,
а какого типа "cor_coefficient"."coeff_corr_temp", "cor_coefficient"."coeff_corr_use" и "dba"."way_length"."coeff_corr"?
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Неверное округление / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]