none
Math.Round RRS feed

  • 问题

  • dValue = 9.389;
    dValue = Math.Round(dValue, 2);

    这样得到的是dValue = 9.4,
    请问怎样才能得到9.38?
    最终目的是得到没有舍取的两位小数:
    9.383->9.38
    9.384->9.38
    9.385->9.38
    9.386->9.38
    9.387->9.38


    谢谢X.X.Y版主的回答,
    再加2个条件:
    double dValue = 9.389;
    int iRound;//指定要保留的位数
    有没有更简洁的办法,只用double的特性来实现?

    今天不玩命,明天命玩你
    • 已编辑 HunterFeng 2009年9月24日 2:38
    • 已移动 肖小勇Moderator 2009年9月24日 4:30 .Net Framework 一般性问题 (发件人:Visual C#)
    2009年9月24日 1:15

答案

  • 你好!

    其实就是个精度问题,如果在 SQL Server 中很好实现,可以通过 CAST(ColName AS DECIMAL(18,2)), C# 中请参考下面的代码。

    Decimal vals = 9.389m;
    vals = Decimal.Truncate(vals * 100) / 100; // Decimal.Truncate 去掉小数取整 


    知识改变命运,奋斗成就人生!
    2009年9月24日 1:35
    版主

全部回复

  • 你好!

    其实就是个精度问题,如果在 SQL Server 中很好实现,可以通过 CAST(ColName AS DECIMAL(18,2)), C# 中请参考下面的代码。

    Decimal vals = 9.389m;
    vals = Decimal.Truncate(vals * 100) / 100; // Decimal.Truncate 去掉小数取整 


    知识改变命运,奋斗成就人生!
    2009年9月24日 1:35
    版主
  • 受到X.X.Y版主的回答启发,自己解决了:

                double dValue = 9.398;

                int iRound = 2;

                double PowTen = Math.Pow(10, iRound);

                dVal = Math.Truncate(dVal * PowTen) / PowTen;


    今天不玩命,明天命玩你
    2009年9月24日 2:56