2011-06-04 46 views
3

一些数学人请帮助,我想只使用数学转换。功能。 (Pow,Floor ......等),只有一个语句是可选的,不用if else来检查1-4或6-9的小数点后的第5个五位数字。仅使用数学函数向上/向下舍入?

  • 我想小数点后5位数字转换成5位小数点后的规则如下,送花儿给人5和0结尾。

规则1:

double number1 = 1.2345* 
if(* from 1 to 4) 
    number1 ==> 1.23455 
if (* from 6 to 9) 
    number1 ==> 1.23460 

规则2:

double number2 = 1.2345* 
if(* from 1 to 4) 
    number2 ==> 1.23450 

if (* from 6 to 9) 
    number2 ==> 1.23455 

,我想出了答案规则1,但它需要2语句,我不知道它是可以做到的只有1语句

number1 = Math.Floor((number1 + 0.00005) * 20000)/20000 - 0.00005; 
number1 = Math.Floor((number1 + 0.00005) * 20000)/20000 ; 

感谢

+0

这可能是家庭作业吗? – Mehrdad 2011-06-04 04:23:03

+0

不,这是我想添加到我的代码中的规则,将规则转换为上面的规则来转换股票价格 – Kelly 2011-06-04 04:27:08

+0

在您对规则2的描述中,您对数字6到9应该转到1.23465,加上添加。你是否意味着1.23455? – 2011-06-04 05:03:20

回答

3

对于规则#1:

var y = (int)((x - 0.00001) * 20000)/20000.0 + 0.00005; 

结果:

1.23450 => 1.23450 
1.23451 => 1.23455 
1.23452 => 1.23455 
1.23453 => 1.23455 
1.23454 => 1.23455 
1.23455 => 1.23455 
1.23456 => 1.23460 
1.23457 => 1.23460 
1.23458 => 1.23460 
1.23459 => 1.23460 
1.23460 => 1.23460 

对于规则#2:

var y = (int)(x * 20000)/20000.0; 

结果:

1.23450 => 1.23450 
1.23451 => 1.23450 
1.23452 => 1.23450 
1.23453 => 1.23450 
1.23454 => 1.23450 
1.23455 => 1.23455 
1.23456 => 1.23455 
1.23457 => 1.23455 
1.23458 => 1.23455 
1.23459 => 1.23455 
+0

规则2,舍入而不是圆整 – Kelly 2011-06-04 04:39:39

+0

谢谢,它的作品完美.. :) – Kelly 2011-06-04 05:00:00

2

记住你如何圆(整数):

round (a) = floor (a + .5) 

所以,现在一些乘法与10的幂盐是,通过10,你的权力与一些部门一些增加.5和胡椒它被设置。

+1

+1为盐和胡椒粉 – 2011-06-04 04:33:01