1

整数にゼロを埋め込むには、次のようにできることを知っています。

NSString *version = [NSString stringWithFormat:@"%03d", appVersion.intValue];

これにより、必要に応じて整数の左側に最大 3 つのゼロが追加されます。ただし、同じことをしたいのですが、左にパディングする代わりに、右にパディングする必要があります。

整数の右側にゼロを埋め込むにはどうすればよいですか? (理想的には、上記の方法と同様の単純さで)

これが私が必要とするものの例です、

整数が 38 であることが判明した場合、バージョン文字列を 380 として出力する必要があります (整数の末尾にゼロを 1 つだけ追加しました。これは、最大 3 文字が必要であり、整数が 3 文字未満の場合はゼロです)。を追加して 3 つにします)。

現在使用している方法では 038 が返されます。380 が必要です。

または、整数が 381 の場合、最大 3 文字しか必要ないため、出力は 381 になるはずです。

4

2 に答える 2

5

値に1000を掛けて、それを印刷できますか?多くのゼロが必要な場合は、オーバーフローの可能性を減らすために、通常、をaに昇格intさせるlonglong long、乗算する前にプロモートすることをお勧めします。

NSString *version = [NSString stringWithFormat:@"%ld", ((long)appVersion.intValue)*1000];

桁の長さが必要な場合はint、10の因数で乗算することを決定する前に、値floorの小数logを取得して1を加算します。例えば:

int foo = 123;
int digitsInFoo = floor(log10(foo)) + 1; /* 3 */

次に、いくつかのルールを使用して、追加するゼロ桁の数を決定します。

int totalDesiredLength = 5;
int numberOfZeroesNeeded = totalDesiredLength - digitsInFoo; /* this assumes totalDesiredLength >= digitsInFoo */
int factor = (int) pow(10, numberOfZeroesNeeded); /* 100 */

その場合、5桁の結果はfoo * factorまたはになります12300。必要に応じて、状況に合わせてこれを調整できます。奇妙な結果にならないように、境界をテストします。

于 2012-08-13T17:52:34.910 に答える
0
char buf[4];
int len = sprintf(buf, "%u", 38);
while (len < 3)
    buf[len++] = '0';
buf[len] = '\0';

sprint_sあなたはよりも好むかもしれませんsprintf。そして、あなたが本当に偏執的であるならば、から返される値sprintfが負でないことを確認してください。

于 2012-08-13T18:28:03.650 に答える