仅使用数学函数进行四舍五入处理?

3
我是一位能够翻译文本的助手。

有些数学专业的人请帮忙,我想使用仅有的数学函数(Pow、Floor等)进行转换。只用单个语句,不使用if else来判断小数点后第五位是否为1-4或6-9。

  • 我想将小数点后的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 

Rule 2:

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

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

我想到了规则1的答案,但需要两个陈述句,不知道是否能够只用一个陈述句完成

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

谢谢


这可能是作业吗? - user541686
不,这是我想要添加到我的代码中的规则,以按照上述规则转换股票价格。 - Kelly
在您的第二条规则描述中,对于数字6到9,您写道它应该变为1.23465,这将是四舍五入加上添加。您是否意思是1.23455? - Joel B Fant
如果你关心一个数字的小数表示,那么 double 几乎总是错误的选择。应该使用 Decimal - CodesInChaos
2个回答

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

规则2,向下取整而不是向上取整。 - Kelly

2

记得如何将数字四舍五入(转换为整数):

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

现在,用一些10的幂次方相乘来加盐,加上0.5进行一些加法,并且用一些10的幂次方进行除法,你就可以开始了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接