2010-11-23 57 views
1

我想實現四捨五入後舍入爲3位小數位的邏輯。提取小數點後的10位數,並應用舍入到3個位置

如果小數點位置1 - 3的值等於000(與整數無關),並且小數點後第4位至第10位的值大於0,則顯示屏中的小數點第三位將舍入向上。

例如:

 
1.1230000000 --> 1.123 
1.1230010000 --> 1.123 
1.1230600000 --> 1.124 
1.0000010000 --> 1.001 
1.0003000000 --> 1.003 
5.00000--> 5.001 

期待

+1

首先,這是一個非常奇怪的「舍入」程序。其次,你的例子似乎是錯的,或者我不明白。根據你的描述,你應該從1.1230010000得到1.124,而不是你的例子中的1.123。 – TToni 2010-11-23 21:56:12

+0

TToni,你是對的......我不知道我是如何犯這個錯誤的。我們需要做這個顯示的目的,因爲我們不能顯示長數字。 – Kris 2010-11-23 22:02:05

回答

1
Math.Ceiling(myNumber*1000)/1000; 

應爲正數的伎倆。測試你是否得到負數的期望行爲(沒有在你的例子中給出)。如果不是,請使用Floor來代替天花板來獲得否定。

0

我不是一個分享點的人,但我有一般的語言經驗。

不是Math.ceil()使用js Int()或其他int()函數您有。 ceil()不管壓裂值!= 0總是移動到下一個整數。 parseInt切斷了分裂部分,這正是他真正想要做的。我在msdn上找不到任何sharepoint API參考。 我基於JavaScript/ecmascript 262 5.1規範。 如果你想要像5位數字位數,這是

Function truncateDigits(Double n, Integer numdigits)) 
    return Int(Math.Power(10,numdigits)*n)/Math.Power(10,numdigits); 
EndFunction 

但要注意,浮點與甚至多次加或減0.1的一個問題,你會得到由於浮點錯誤雜亂的結果。要使用財務數據,如果有數據類型,則應使用十進制數據類型,如果語言提供它,則應使用十進制數據類型不存在此問題。否則,您可以通過查看大整數類型並在中間或您想要的位置僞造小數點並相應地進行計算來模擬定點小數。顯示器會要求你創建你自己的顯示程序。但它的速度會很快,並且能力有限(沒有觸發函數,你必須根據整數自行編寫的功能)。你需要想出自己的算術例程,因爲正常的假設小數點在錯誤的地方。