首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >截断两位小数,不进行舍入

截断两位小数,不进行舍入
EN

Stack Overflow用户
提问于 2010-06-30 02:32:05
回答 20查看 205.6K关注 0票数 129

假设我的值是3.4679,想要3.46.我如何才能在不四舍五入的情况下截断到小数点后两位?

我尝试了以下方法,但这三个方法都给了我3.47:

代码语言:javascript
复制
void Main()
{
    Console.Write(Math.Round(3.4679, 2,MidpointRounding.ToEven));
    Console.Write(Math.Round(3.4679, 2,MidpointRounding.AwayFromZero));
    Console.Write(Math.Round(3.4679, 2));
}

这将返回3.46,但只是看起来有点脏:

代码语言:javascript
复制
void Main()
{
    Console.Write(Math.Round(3.46799999999 -.005 , 2));
}
EN

回答 20

Stack Overflow用户

回答已采纳

发布于 2010-06-30 02:36:32

代码语言:javascript
复制
value = Math.Truncate(100 * value) / 100;

注意,像这样的分数不能用浮点数精确表示。

票数 175
EN

Stack Overflow用户

发布于 2012-04-10 04:46:20

对于在C#中截断小数的实际用法,拥有一个完整的函数会更有用。如果您愿意,可以非常容易地将其转换为Decimal扩展方法:

代码语言:javascript
复制
public decimal TruncateDecimal(decimal value, int precision)
{
    decimal step = (decimal)Math.Pow(10, precision);
    decimal tmp = Math.Truncate(step * value);
    return tmp / step;
}

如果你需要VB.NET,试试这个:

代码语言:javascript
复制
Function TruncateDecimal(value As Decimal, precision As Integer) As Decimal
    Dim stepper As Decimal = Math.Pow(10, precision)
    Dim tmp As Decimal = Math.Truncate(stepper * value)
    Return tmp / stepper
End Function

然后像这样使用它:

代码语言:javascript
复制
decimal result = TruncateDecimal(0.275, 2);

代码语言:javascript
复制
Dim result As Decimal = TruncateDecimal(0.275, 2)
票数 57
EN

Stack Overflow用户

发布于 2017-04-27 00:37:07

一种通用快速的System.Decimal方法(无需Math.Pow() /乘法)

代码语言:javascript
复制
decimal Truncate(decimal d, byte decimals)
{
    decimal r = Math.Round(d, decimals);

    if (d > 0 && r > d)
    {
        return r - new decimal(1, 0, 0, false, decimals);
    }
    else if (d < 0 && r < d)
    {
        return r + new decimal(1, 0, 0, false, decimals);
    }

    return r;
}
票数 45
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3143657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档