将结果截断到两位小数,然后在SQL Server中将它们四舍五入到下一个整数

时间:2018-12-11 22:42:15

标签: sql sql-server tsql

在下面的这段代码中,我得到了一定百分比的结果。

        <ng-template pTemplate="header" let-columns>             
            <tr >
                <th rowspan="2" class="border-right emp-name">Employee Name</th>
                <th rowspan="2" class="border-right" style="width:100px;">ID</th>
                <th *ngFor="let col of columns" class="border-right">{{col.header}}</th>                   
            </tr>
      </ng-template>

    <ng-template pTemplate="body"  let-rowData let-columns="columns" >      
          <tr>            
              <td class="border-right" style="text-align: center">{{rowData.searchName}}</td>
              <td class="border-right" style="text-align: center">{{rowData.patientIndex}}</td>

              <ng-container *ngIf="rowData.status=='A'">
                  <td *ngFor="let col of columns" pEditableColumn [ngSwitch]="col.field" class="border-right">
                      <div *ngSwitchCase="'sizeMask268'">
                        <p-cellEditor>
                          <ng-template pTemplate="input">                                
                            <p-dropdown appendTo="body" [options]="n95" [(ngModel)]="rowData[col.field]" [style]="{'width':'100%'}"  ></p-dropdown>
                            <p-calendar id="calendarInput" appendTo="body" [showIcon]="true"  [(ngModel)]="rowData.dateOf268"></p-calendar>
                          </ng-template>
                          <ng-template  pTemplate="output" >                             
                              <p-dropdown appendTo="body" [options]="n95" [(ngModel)]="rowData[col.field]" [style]="{'width':'100%'}" ></p-dropdown>
                             <p-calendar  appendTo="body" [showIcon]="true" [(ngModel)]="rowData.dateOf268" (onFocus)="clickCalendar()"></p-calendar>                            
                          </ng-template>
                        </p-cellEditor>  
                     </div>
                  </td>
                </ng-container>  
           </tr>
        </ng-template>

我希望将RatioPercent截断(缩短)到两位小数,并且截断的结果必须四舍五入到下一个整数。

例如: RatioPercent = case when input.Name = 'Abc' then convert(int, lbase.AbcRatio) end, 将作为96.001%交付,而96将作为80.01%交付。

如果我使用81,它将只给我cast()96

80

但是,如果我使用 RatioPercent = case when input.Name = 'Abc' then cast(convert(int, lbase.AbcRatio) as decimal (10, 0)) end, 而不是ceiling(),那么它将给我97和81。

3 个答案:

答案 0 :(得分:1)

您需要将ceilingcast组合在一起,首先转换为2个小数位,然后四舍五入:

select ceiling(cast(96.001 as decimal(10,2)))
union all 
select ceiling(cast(80.01 as decimal(10,2)))

结果为96和81。


根据Jeroen Mostert的评论进行编辑,如果您需要96.009向下舍入到96,这是使用round的替代选项:

select ceiling(round(96.009, 2, 1))

答案 1 :(得分:1)

这也有效:

select ceiling(cast(96.001 * 100 as int) /100.0)
union all
select ceiling(cast(80.01 * 100 as int) /100.0)

结果为9681

更新

在具有约50,000行的表上进行一些测试,并且当前接受的答案(ceiling(cast(96.001 as decimal(10,2))))的运行速度快了3毫秒……所以坚持下去。

这是一项快速测试,其中包含几个选项,您可以将它们插入自己数据库的表中:

set statistics time on

--uncomment exactly one line below
 --select [column]  --control
 --select ceiling(([column] * 100) /100.0) 
 --select ceiling(cast([column] as decimal(10,2))) 
 --select ceiling(floor([column] * 100 )/100)

from [Table]
set statistics time off

答案 2 :(得分:0)

您可能希望将cast与2个小数点组合,然后输入ceiling

ceiling(cast(convert(int, lbase.AbcRatio) as decimal (10, 2))