草庐IT

malign-double

全部标签

c++ - 为什么将两个 int 分配给 double 时不会产生正确的值?

为什么会出现在下面的代码片段中inta=7;intb=3;doublec=0;c=a/b;c最终的值为2,而不是预期的2.3333。如果a和b是double,那么答案确实会变成2.333。但肯定是因为c已经是一个double它应该与整数一起使用?那么为什么int/int=double不起作用? 最佳答案 这是因为您使用的是operator/的整数除法版本,它需要2个int并返回一个int。为了使用返回double的double版本,必须将至少一个int显式转换为双.c=a/(double)b;

c++ - 0.1 float 大于 0.1 double。我以为是假的

这个问题在这里已经有了答案:Ifoperator(5个回答)关闭9年前。让:doubled=0.1;floatf=0.1;应该表达(f>d)返回true还是false?根据经验,答案是true。但是,我希望它是false。由于0.1不能完美地用二进制表示,而double有15到16十进制数字精度,而float只有7。因此,它们都小于0.1,而double更接近0.1。我需要对true的确切解释。 最佳答案 我想说答案取决于将double转换为float时的舍入模式。float有24位binary位精度,而double有53位。在二进

iphone - 从 float 或 double 实例化 NSDecimalNumber 的正确方法

我正在寻找从double或short实例化NSDecimalNumber的最佳方法。有以下NSNumber类和实例方法...+NSNumbernumberWithFloat+NSNumbernumberWithDouble-NSNumberinitWithFloat-NSNumberinitWithDouble但这些似乎返回NSNumber。另一方面,NSDecimalNumber定义如下:+NSDecimalNumberdecimalNumberWithMantissa:exponent:isNegative:+NSDecimalNumberdecimalNumberWithDeci

iphone - 如何找到 malloc "double free"错误的原因?

我正在用Objective-C编写一个应用程序,但我收到了这个错误:MyApp(2121,0xb0185000)malloc:***errorforobject0x1068310:doublefree***setabreakpointinmalloc_error_breaktodebug当我释放NSAutoreleasePool时会发生这种情况,但我无法确定我要释放两次的对象。如何设置他的断点?有没有办法知道这个“对象0x1068310”是什么? 最佳答案 当一个对象被“双重释放”时,最常见的原因是您(不必要地)释放了一个自动释放的

c++ - 如何在 C++ 中将 double 转换为字符串?

我需要将double值存储为字符串。我知道如果我想显示它可以使用printf,但我只想将它存储在一个字符串变量中,以便以后可以将它存储在map中(作为value,而不是键)。 最佳答案 //TheCway:charbuffer[32];snprintf(buffer,sizeof(buffer),"%g",myDoubleVar);//TheC++03way:std::ostringstreamsstream;sstream(myDoubleVar); 关于c++-如何在C++中将dou

c++ - 不能在 double 上使用模数?

我有一个C++程序(使用g++编译)。我正在尝试将两个double作为操作数应用于模函数,但出现以下错误:error:invalidoperandsoftypes'double'and'double'tobinary'operator%'代码如下:intmain(){doublex=6.3;doubley=2;doublez=x%y;} 最佳答案 %运算符用于整数。您正在寻找fmod()function.#includeintmain(){doublex=6.3;doubley=2.0;doublez=std::fmod(x,y);

c++ - 解释了一种将 double 舍入为 32 位整数的快速方法

在阅读Lua的源代码时,我注意到Lua使用宏将double值四舍五入为32位int值。该宏在Llimits.hheaderfile中定义,内容如下:unioni_cast{doubled;inti[2]};#definedouble2int(i,d,t)\{volatileunioni_castu;u.d=(d)+6755399441055744.0;\(i)=(t)u.i[ENDIANLOC];}这里的ENDIANLOC是根据endianness定义的:0代表小端,1代表大端架构;Lua小心地处理字节序。t参数被替换为整数类型,例如int或unsignedint。我做了一些研究,发现

javascript - 有人可以解释这个 'double negative' 技巧吗?

这个问题在这里已经有了答案:Whatisthe!!(notnot)operatorinJavaScript?(42个回答)关闭8年前。我绝不是Javascript方面的专家,但我一直在阅读MarkPilgrim的"DiveintoHTML5"网页,他提到了一些我想更好地理解的东西。他说:Finally,youusethedouble-negativetricktoforcetheresulttoaBooleanvalue(trueorfalse).functionsupports_canvas(){return!!document.createElement('canvas').get

java - 将 double 格式设置为分数

已结束。此问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提出有关书籍、工具、软件库等方面的建议的问题。您可以编辑问题,以便用事实和引用来回答它。关闭6年前。Improvethisquestion是否有一个库可以将Double转换为String与整数,后跟分数?例如1.125=11/8我只寻找64英寸以内的分数。 最佳答案 您的问题很简单,因为您确信在C#中分母将始终除以64。(有人可以随意翻译Java版本):stringToMixedFraction(decimalx){intwhole=(i

c# - 在C#中将double格式化为字符串

我有一个Double,其值可能在0.000001到1,000,000,000.000之间我希望将此数字格式化为字符串,但有条件地取决于其大小。因此,如果它非常小,我想使用以下格式对其进行格式化:String.Format("{0:.000000000}",number);如果不是那么小,比如0.001,那么我想使用类似的东西String.Format("{0:.00000}",number);如果结束了,比如1,000,然后将其格式化为:String.Format("{0:.0}",number);有没有一种聪明的方法可以根据我要格式化的值的大小来构造这个格式字符串?