Cocoa CGFloat的floatValue

Cocoa CGFloat的floatValue,cocoa,slider,Cocoa,Slider,我有一个NSSlider,它试图将常规浮点转换为CGFloat。我正在使用的代码: CGFloat testing = [mainSlider floatValue]; 然而,当我尝试记录测试变量时,这只会使其成为“0.00” NSLog(@"%f", testing); 有人知道为什么会这样吗?谢谢你的帮助 检查主滑块是否不是零 试试这个以防万一(不记得CGFloat是否为双精度): NSLog(@“%f”,(双重)测试) 检查变量是否没有像这样被阴影化: CGFloat testing

我有一个NSSlider,它试图将常规浮点转换为CGFloat。我正在使用的代码:

CGFloat testing = [mainSlider floatValue];
然而,当我尝试记录测试变量时,这只会使其成为“0.00”

NSLog(@"%f", testing);
有人知道为什么会这样吗?谢谢你的帮助

  • 检查主滑块是否不是零
  • 试试这个以防万一(不记得CGFloat是否为双精度):

    NSLog(@“%f”,(双重)测试)

  • 检查变量是否没有像这样被阴影化:

    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似乎不喜欢这段代码。。。