热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

一个double型的数字取n位小数,其它小数位全部舍去

有人提出用下面的:doubled12.3424;ddouble.Parse(d.ToString(F2));ddouble.Parse(d.ToString(.##));上面这
有人提出用下面的:
double d=12.3424;
d=double.Parse(d.ToString("F2"));
d=double.Parse(d.ToString(".##"));
上面这些是否都是四舍五入?(根据我得测试是),但是客户要求两位小数后的数字不管是几都要舍去,就是9也不例外即也要舍去。
这样诸位的回答不能够满足我得要求啊。
此贴与http://community.csdn.net/Expert/topic/3235/3235273.xml?temp=.1981012贴是一个意思。请大家务必理解我得要求:必须是两位小数后全部舍去。

19 个解决方案

#1



 那你就直接截取...

#2


double d=12.3424, d1;

d1 = d - 0.005;
d=double.Parse(d1.ToString("F2"));

#3



 try

  double d = 12.3424;
string st = d.ToString();
st = st.Substring(0,st.LastIndexOf(".")+3);
                           
                            d = double.Parse(st);

#4


up

#5


转换为字符串,然后直接截取!

#6


double a = 3212.09887;
string bx = "";
string[] temp = a.ToString().Split('.');
bx = temp[0] + ".";
for(int i = 0;i<2;i++)
{
bx += temp[1][i];
}
Console.WriteLine(bx);

#7


double d = 12.12999;
string t = d.ToString();
t = t.Substring(0,t.IndexOf(".")+3);

d = Double.Parse(t);

#8


格式化数字提供的方法一般都是四舍五入,因此可以自己写一个方法,把它从数字转换成字符串,截取以后再转换成数字。这样也挺简单的,不要企图希望.NET Framework为你做好一切工作,呵呵

#9


在d.ToString()的时候有些数字就不是原来的数字了,例如上面提到的828.99999999999989,ToString后变成829,这当然不是我想要的结果啊。就是因为这个原因我才放弃了使用我以前写的这个函数:
public double GetTrun(double myDouble,int Length)
{

string tempString;
tempString=myDouble.ToString ();
int startInt=tempString.IndexOf (".");
if (startInt==-1)
{
//r如果是整数,直接返回
return myDouble;
}
int tempint=tempString.Substring (startInt+1).Length ;//取小数点后共有几位
if (tempint<=Length)
{//如果小数点后的位数小于等于您要的精度数,则直接返回
return myDouble;
}
tempString=tempString.Substring(0,startInt+1+Length);
myDouble=Convert.ToDouble (tempString);
return myDouble;
}

#10


自己up一下,问题还是没有很好的解决,高手快来帮忙啊。谢谢啦。

#11



 "828.99999999999989"  ?

 这个double太“长”了,当然就不能采用上面的方式了,因为:

 调用Double.ToString()默认情况下,返回值只包含 15 位精度,但内部维护的最大精度是 17 位。如果此实例的值超过 15 位,则 ToString 返回 PositiveInfinitySymbol 或 NegativeInfinitySymbol,而不是预期的数字。如果要求更高的精度,请用“G17”或“R”格式规范指定 format;前一种格式总是返回 17 位精度;而后一种格式在数字可以用 15 位精度表示时返回 15 位精度,在数字只能用最大精度表示时返回 17 位精度。

#12


double d=12345.678902
保留2位:
(double)((int)(d*100))/100
n位也可以同样做啊

#13


而且,微软得好像不是四舍五入的。四舍六入,如果是五,就要看看上一位是单数还是双数了。
我之前弄个东西不知道这个,最后还是得自己写个四舍五入的函数来用。

#14


Math.Round 方法  [C#]请参见
Math 类 | Math 成员 | System 命名空间 | C++ 托管扩展编程 语言
C#

C++

JScript

Visual Basic

全部显示
返回最接近指定值的数字。
重载列表
返回最接近指定值的整数。
受 .NET Framework 精简版的支持。
[Visual Basic] Overloads Public Shared Function Round(Decimal) As Decimal
[C#] public static decimal Round(decimal);
[C++] public: static Decimal Round(Decimal);
[JScript] public static function Round(Decimal) : Decimal;
返回最接近指定值的整数。
受 .NET Framework 精简版的支持。
[Visual Basic] Overloads Public Shared Function Round(Double) As Double
[C#] public static double Round(double);
[C++] public: static double Round(double);
[JScript] public static function Round(double) : double;
返回具有指定精度、最接近指定值的数。
受 .NET Framework 精简版的支持。
[Visual Basic] Overloads Public Shared Function Round(Decimal, Integer) As Decimal
[C#] public static decimal Round(decimal, int);
[C++] public: static Decimal Round(Decimal, int);
[JScript] public static function Round(Decimal, int) : Decimal;
返回具有指定精度、最接近指定值的数。
受 .NET Framework 精简版的支持。
[Visual Basic] Overloads Public Shared Function Round(Double, Integer) As Double
[C#] public static double Round(double, int);
[C++] public: static double Round(double, int);
[JScript] public static function Round(double, int) : double;
示例
下面的代码演示就近舍入。
[Visual Basic] 
Math.Round(3.44, 1) 'Returns 3.4.
Math.Round(3.45, 1) 'Returns 3.4.
Math.Round(3.46, 1) 'Returns 3.5.
[C#] 
Math.Round(3.44, 1); //Returns 3.4.
Math.Round(3.45, 1); //Returns 3.4.
Math.Round(3.46, 1); //Returns 3.5.

#15


其实, 828.99999999999989这个数字是8.29*100的结果,还有类似8.2*100,8.12*100,计算的结果并不是整数,都是类似上面这个数字的数,应该还有其他的数我记不清更多了。我也曾经用下面这个函数想达到我得要求:
public double GetTrun(double myDouble,int Length)
{
     int i;
     double y=1;
     for(i=0;i        {
y*=10;
}
myDouble=Math.Floor (myDouble*y)/y;
return myDouble;
}
但就是因为上面相乘的结果不对而出错了。同时也要考虑如果真的传入值就是8.2899999999999989数字,结果又会怎样?
我觉得:这个方法的关键在8.29*100<>829,而第一种方法的关键在ToString时考虑精度的问题。

如果采用精度的话,828.99999999999989精度17可以,我查了一下,double类型的精度在-1.79769313486232e308和+1.79769313486232e308之间,那么如果下一个数的精度变大了,我又该将"G17"改成多少?或者取它的最大精度308?这样double类型的数字是否浪费了太多的地址空间?

#16


去掉尾数,而不是四舍五入的函数:

public double GetTrun(double myDouble,int Length)
{
  double rate = 0.5;
  for(int i = 0; i < Length; i++)
  {
    rate /= 10;
  }

  double newdouble = myDouble - rate;

  return newdouble;
}

#17


另外说明一下,double型的数据是没有小数点位数的,他总是保持固定的精度。
我上面这个函数只是获得一个新的double数据,可以让你直接 Doulbe.ToString()而已。

#18


你所需要的只是控制显示格式,double的内部精度是不能更改的。

#19


乘100,转换为int,再转换为double,除以100即可:

public double formatNum( double num )
{
return (double)((int)(num*100))/100;

}

#20


  • pb中截取小数位的两个函数
  • C# 四舍五入、进一法、舍位(取整,舍去小数,向负无穷舍入)函数

推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文总结了Java中日期格式化的常用方法,并给出了示例代码。通过使用SimpleDateFormat类和jstl fmt标签库,可以实现日期的格式化和显示。在页面中添加相应的标签库引用后,可以使用不同的日期格式化样式来显示当前年份和月份。该文提供了详细的代码示例和说明。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • React基础篇一 - JSX语法扩展与使用
    本文介绍了React基础篇一中的JSX语法扩展与使用。JSX是一种JavaScript的语法扩展,用于描述React中的用户界面。文章详细介绍了在JSX中使用表达式的方法,并给出了一个示例代码。最后,提到了JSX在编译后会被转化为普通的JavaScript对象。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
author-avatar
df0134330
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有