1

この質問に似た問題があります: NSDecimal または NSDecimalNumber のフォーマットされていない文字列表現を取得するにはどうすればよいですか? NSNumber として正確に表現された文字列形式の数値が必要ですが、この数値は別の場所で文字列に変換されるため、それを避けることはできません。私が抱えている問題は、数値が文字列に変換されると、文字列が科学表記法になる場合があることです。

NSDecimalNumber *dn = [NSDecimalNumber decimalNumberWithString:@"0.0001"];
NSString *s = [dn stringValue]; // s will be @"1E-4"

この数値が科学表記法で表示されないようにするにはどうすればよいですか?

私はMacやiPhoneではなく、GNUstepの2005年頃のバージョン(おそらくGNUstep Baseのv1.11.1)で作業しています。これは、参照した他の質問との動作の違いの一部を説明する可能性があります。私自身の GNUstep インストールの基本ライブラリ APIとドキュメントを調べましたが、役立つものは何も見つからないようです。

編集 2/7/12:

質問は少し変わりましたが、目標は同じです。もともと、文字列出力部分を制御できるとは思っていませんでしたが、値を文字列として返すことができました。この時点で、フォーマット文字列を使用しようとしていますが、科学表記法が表示されないようにしたいと考えています。

[NSString stringWithFormat:@"%1.14g", [val doubleValue]]

%g値に特定の有効桁数が必要なため、使用することにしました。を使用する%fと、余分なゼロを削除できますが、数値が常にきれいに表示されるとは限りません。たとえば、800000000.79 は 800000000.7899999600 と表示されます。

その桁数の前に科学表記法を表示せずに、特定の有効桁数 (または小数点以下の桁数) までのきれいにフォーマットされた数値を取得する方法はありますか?

Cのアドバイスも喜んで受け入れます。

4

4 に答える 4

2

NSNumberFormatterをチェックアウトする必要があります

// Create formatter 
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];     
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; // adjust this
NSString *formattedOutput = [formatter stringFromNumber:yourDecimalNumber];
于 2012-01-13T22:48:49.413 に答える
1

NSStringC値(double、int、longなど)を取得してから、C文字列またはwithとしてフォーマットするのはstringWithFormat:どうですか?

于 2012-01-23T16:03:35.997 に答える
0

以下の方法を使用して、指数表記による表現を回避します。

Double を文字列に変換

func getStringFrom(double doubleVal: Double) -> String
{
    var stringValue : String = "0.00"

    let formatter = NSNumberFormatter()
    formatter.usesSignificantDigits = true;
    formatter.maximumSignificantDigits = 100
    formatter.groupingSeparator = "";
    formatter.numberStyle = .DecimalStyle
    stringValue = formatter.stringFromNumber(doubleVal)!;

    return stringValue

}

文字列を倍精度に変換

func getDoubleFrom(textField textField: UITextField) -> Double
{
    var doubleValue : Double = 0.0

    if let val = textField.text
    {
        let numberFormatter = NSNumberFormatter()
        numberFormatter.numberStyle = NSNumberFormatterStyle.DecimalStyle
        let finalNumber = numberFormatter.numberFromString(val)
        doubleValue = (finalNumber?.doubleValue)!;
    }

    return doubleValue
}
于 2016-08-25T15:31:34.387 に答える
0

stringValue メソッドの代わりに NSNumberFormatter を使用して数値を出力してみてください。より多くのオプションがあります。

(私は NSNumberFormatter が GNUstep で利用可能であると仮定しています)

于 2012-01-13T22:40:12.533 に答える