2015-10-23 43 views
2
小數點後去除零作爲表達

我在我在我的SSRS報告文本框的一個下面的表達式:如何在SSRS

=IIF(IsNothing(Lookup(Trim(Fields!venta_Cod_vendedor.Value) & "-" & ReportItems!Textbox233.Value, Fields!AgregarVentas.Value, Fields!venta_prom_sem.Value, "EfectividadDeFrecuencias_Ventas")) = True 

,"0" 

,IIF(Lookup(Trim(Fields!venta_Cod_vendedor.Value) & "-" & ReportItems!Textbox233.Value, Fields!Agregar.Value, Fields!total_cant_pos.Value, "EfectividadDeFrecuencias_Total") <> "0" 

,FormatNumber(Lookup(Trim(Fields!venta_Cod_vendedor.Value) & "-" & ReportItems!Textbox233.Value, Fields!AgregarVentas.Value, Fields!venta_frecuencia.Value, "EfectividadDeFrecuencias_Ventas") 
/Lookup(Trim(Fields!venta_Cod_vendedor.Value) & "-" & ReportItems!Textbox233.Value, Fields!Agregar.Value, Fields!total_cant_pos.Value, "EfectividadDeFrecuencias_Total"),2) 

,"0")) 

該部門會給我一個Int64數,15個數字(如果這樣的數學運算給出了這個小數位數)。

所以結果是:

enter image description here

現在這裏是棘手的部分: 我後面的代碼抓住數據集做了全面,轉換成十進制數,然後顯示到水晶報表。

dr.venta_prom_sem = (Convert.ToDouble(dr.total_cant_pos) != 0 ? (Math.Round((Convert.ToDouble(dr.venta_frecuencia)/Convert.ToDouble(dr.total_cant_pos)), 2)).ToString() : "0"); 

因此,這會給我:

enter image description here

,你可以看到,如果我使用的格式數的1.3將轉換爲1,30,這將是錯誤的,同1( 1,00)。現在1,339 ...等會給我1,34,那很好。

但檢查1.065,與FormatNumber,這將給我1.07而不是1.06。

所以問題是,如何將我的數字格式化爲小數點後的最後一個非零數字,如果(在本例中)第三個數值爲5,而不是1.07爲1.06,則選擇較低的數值。我想如果我使用天花板或地板它給我整數部分。

+0

將數字乘以100,使用floor然後除以100? –

+0

真的很好!,除了1,339等會給我1.33而不是1.34 – Nickso

+0

你想上哪個點?通常劃界是005,你想要0051還是006? –

回答

2

試試這個:

=ROUND(1.339,2,MidpointRounding.ToEven) 

這給:1.34

而且

=ROUND(1.065,2,MidpointRounding.ToEven) 

給出:1.06

讓我知道這是有幫助的。

+1

這將舍入到1.06但是這會不會在1.075到1.08之間呢?這可能是OP想要的,我只是想澄清。 –

+0

你是對的@ScottCraner。它輪到最接近的偶數。 –