标签: nsnumberformatter

在iOS中使用NSNumberFormatter进行货币转换时遇到问题

我有一个UITextField,它接收我的应用程序中用户的数字输入.然后,在我的shouldChangeCharactersInRange委托方法中,使用NSNumberFormatter将此文本字段中的值转换为货币格式.当我输入数字"12345678"时,数字被正确转换为$ 123456.78(数字一次输入一位数,到目前为止,一切顺利).但是,当我在此之后输入另一个数字(例如9),而不是显示"1234567.89"时,会显示数字"1234567.88".如果我之后输入另一个数字,之后会有一个完全不同的数字(我在应用程序中使用数字键盘输入数字.这是我的代码:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
modifiedValue = [formatter stringFromNumber:[NSNumber numberWithFloat:[modifiedValue floatValue]]];
textField.text = modifiedValue;
Run Code Online (Sandbox Code Playgroud)

导致这种异常转换的行是这样的:

modifiedValue = [formatter stringFromNumber:[NSNumber numberWithFloat:[modifiedValue floatValue]]];
Run Code Online (Sandbox Code Playgroud)

谁能明白为什么会这样?

uitextfield nsnumberformatter ios uitextfielddelegate

0
推荐指数
1
解决办法
4055
查看次数

是否有任何简单的方法可以在目标c中使用一位数字舍入浮点数?

是.你是对的.当然这是一个重复的问题.在提出我的问题之前,请继续阅读以下内容.

我想舍入一个浮点值,即

56.6748939 to 56.7
56.45678 to 56.5
56.234589 to 56.2
Run Code Online (Sandbox Code Playgroud)

实际上它可以是任意数量的小数精度.但我想把它四舍五入到最接近的值.(如果大于或等于5,则向上舍入,如果不是,则向下舍入).

我可以用下面的代码来做到这一点.

float value = 56.68899
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc]init];
[numberFormatter setMaximumFractionDigits:1];
[numberFormatter setRoundingMode:NSNumberFormatterRoundUp];

NSString *roundedString = [numberFormatter stringFromNumber:[NSNumber numberWithFloat:value]];
NSNumber *roundedNumber = [NSNumber numberFromString:roundedString];
float roundedValue = [roundedNumber floatValue];
Run Code Online (Sandbox Code Playgroud)

以上代码看起来像一个漫长的过程.我有几个数字可以完善.所以这个过程很难将浮点值转换为NSNumber和NSString以及NSNumber和float.

有没有其他简单的方法来实现我的要求?

我仍然对上面的代码有疑问.它说roundUp.所以当谈到roundDown它时,它会起作用吗?

floating-point objective-c rounding nsnumberformatter ios

0
推荐指数
1
解决办法
3451
查看次数

使用Swift如何将字符串转换为数字

我从一个Web服务中获取值,这个值以字符串格式返回价格,这被放入一个字典中,所以我得到的价格为"1.5000",例如货币明显为1.50.然而,对于我的生活,我无法在Swift中使用任何东西来正确格式化.在大多数其他语言中,您可以在几秒钟内完成此操作,因此我对一些非常简单的事情感到有点沮丧.

这是我的测试代码:

    var testnumber = "1.5000"
    let n = NSNumberFormatter()
    n.numberStyle = NSNumberFormatterStyle.DecimalStyle
    n.maximumFractionDigits = 2
    n.minimumFractionDigits = 2
    let returnNumber = n.numberFromString(testnumber)
    println("Returned number is \(returnNumber)")
Run Code Online (Sandbox Code Playgroud)

这打印出调试"number is Optional(1.5)"而不是1.50!

我已经将NSNumberFormatterStyle.DecimalStyle更改为NSNumberFormatterStyle.CurrencyStyle,因为我认为可以为我做,因为返回的数字无论如何都是货币,但这让我回到调试"返回的数字是零" - 这对我来说更加困惑!

我尝试过使用maximumIntegerDigits和minimumIntegerDigits,使用n.locale = NSLocale.currentLocale()设置locales,设置formatWidth,设置paddingPosition和paddingCharacter但没有任何帮助,我要么返回1.5.

我最终需要做的就是将字符串转换为浮点数或货币值,并确保有2个小数位,我不敢相信这很难实现!

非常感谢任何帮助.

nsnumberformatter ios swift

0
推荐指数
1
解决办法
4233
查看次数

如何在swift中以两个整数存储价格

我已经读过,我不应该将价格视为double数字,而是应该将它们存储为两个整数.

举例来说,如果我有一个类型的输入246.464UITextField我应该怎么让两个整数?

nsnumberformatter swift ios9

0
推荐指数
1
解决办法
104
查看次数

如何在swift3中的十进制字符串末尾添加一个零

我从webservice获得了一个特殊的双号,比如来自webservice的0.097或0.034.因此,如果我得到一个特定的数字,如0.56或0.5,我需要在0.56中加零,在0.5中加两个零.如何在swift3中执行此操作?目前我在做:

    class func appendString(data: Int) -> String {
    let value = data
    let formatter = NumberFormatter()
    formatter.minimumFractionDigits = 3 // for float
    formatter.maximumFractionDigits = 3 // for float
    formatter.minimumIntegerDigits = 1
    formatter.paddingPosition = .afterPrefix
    formatter.paddingCharacter = "0"
    return formatter.string(from: NSNumber(floatLiteral: Double(value)))!
  }
Run Code Online (Sandbox Code Playgroud)

任何想法如何实现上述告诉逻辑?

nsnumberformatter swift3

0
推荐指数
1
解决办法
856
查看次数

点击按钮时如何自动递增和递减计数

我有两个按钮叫做"+"和" - ".

如果我点击"+"按钮,我必须将计数值增加到最大"7",如果我点击" - "按钮我必须减少计数值,如果值达到"1",则值必须不会改变,因为最小值I将"1"设为默认值.

这是我的示例代码:

@IBAction func seat_btns(sender: AnyObject) {

    if sender.tag == 10 {

        let i : Int!

        let s = self.seatNumberLabel.text
        if let x = Int(s!) {
            i = x + 1
            self.seatNumberLabel.text = i.description

        }

    }
    else if sender.tag == 20 {
        let s = self.seatNumberLabel.text
        let i : Int!

        if let x = Int(s!) {
            i = x - 1
            self.seatNumberLabel.text = i.description

    }

    }
}
Run Code Online (Sandbox Code Playgroud)

nsnumberformatter ios swift

-2
推荐指数
1
解决办法
1025
查看次数