powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Неверное округление
10 сообщений из 10, страница 1 из 1
Неверное округление
    #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
Неверное округление
    #38254960
Nashville
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d.v.kramarenko,

нули после запятой (точки) определяет тип данных после операции деления. Для примера посмотрите разницу в результатах для следующих запросов
1. select 1/3
2. select 1/3.0
...
Рейтинг: 0 / 0
Неверное округление
    #38254994
d.v.kramarenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Nashville, ясно, спасибо! Вот только с округлением пока что так и не дал ума.
...
Рейтинг: 0 / 0
Неверное округление
    #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
Неверное округление
    #38255410
d.v.kramarenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Nashville,

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

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


выдает результат 19.1, поэтому смотрите какой тип имеют поля n_mid и k.
...
Рейтинг: 0 / 0
Неверное округление
    #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
Неверное округление
    #38257502
d.v.kramarenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну как так-то? Попробовал заменить round на floor(n1*100+0.500001)/100. Все равно без толку. Где нормально округляет, а где нет.
...
Рейтинг: 0 / 0
Неверное округление
    #38284420
escapist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
d.v.kramarenko,
а какого типа "cor_coefficient"."coeff_corr_temp", "cor_coefficient"."coeff_corr_use" и "dba"."way_length"."coeff_corr"?
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Неверное округление
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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