Cocoa CGFloat的floatValue
我有一个NSSlider,它试图将常规浮点转换为CGFloat。我正在使用的代码:Cocoa CGFloat的floatValue,cocoa,slider,Cocoa,Slider,我有一个NSSlider,它试图将常规浮点转换为CGFloat。我正在使用的代码: CGFloat testing = [mainSlider floatValue]; 然而,当我尝试记录测试变量时,这只会使其成为“0.00” NSLog(@"%f", testing); 有人知道为什么会这样吗?谢谢你的帮助 检查主滑块是否不是零 试试这个以防万一(不记得CGFloat是否为双精度): NSLog(@“%f”,(双重)测试) 检查变量是否没有像这样被阴影化: CGFloat testing
CGFloat testing = [mainSlider floatValue];
然而,当我尝试记录测试变量时,这只会使其成为“0.00”
NSLog(@"%f", testing);
有人知道为什么会这样吗?谢谢你的帮助
CGFloat testing = 0.0;
if(YES){
CGFloat testing = [mainSlider floatValue];
//should be: testing = [mainSlider floatValue];
}
NSLog(@"testing = %f", testing); //this will print "testing = 0.000000"
请注意,当
floatValue
将值转换为单精度时,转换为double
不会恢复任何精度损失。最好只使用doubleValue
。此外,不需要强制转换为(double)。当使用float参数调用vargs函数时,c语言会隐式地这样做。mainsloider不是nil,只是出于某种奇怪的原因,它不会转换为CGFloat。当我像这样记录它时:NSLog(@“%f”,[mainValue]),它返回结果。但是当我用它创建一个CGFloat时就不是了。整个double
铸造辩论中的另一个折痕是CGFloat
在32位模式下运行时是typedef
ed到float
,但在64位模式下运行时是double
。因此,在32位模式下,CGFloat testing=[mainsloiderdoublevalue]
将其压缩为一个精度float
类型…好吧,这个问题变得越来越奇怪。相同的代码(完全相同的代码)在其他所有函数中运行,但我试图让它运行的函数除外。出于某种原因,drawRect:(NSRect)rect似乎不喜欢这段代码。。。