菜鸟教程小白 发表于 2022-12-12 11:05:04

ios - 按国家/地区代码将 NSDecimalNumber 格式化为货币而不会丢失精度


                                            <p><p>所以现在我有以下代码:</p>



<pre class="lang-objc prettyprint-override"><code>- (NSString*)convertToLocalCurrencyFormat:(NSDecimalNumber*)result {
NSNumberFormatter* formatter = [ init];
formatter.numberStyle = NSNumberFormatterCurrencyStyle;
formatter.currencyCode = self.comparisonCurrency;
formatter.usesSignificantDigits = YES;
return ;
}
</code></pre>

<p>当我传入一个包含 <code>678071967196719797153475347466.94627863</code> 的 <code>NSDecimalNumber*</code> 时,它会被格式化为 <code>¥678,072,000,000,000,000,000,000,000,000</code>(使用 <code>currencyCode</code> > 设置为 <code>JPY</code>)。如果我省略了 <code>formatter.usesSignificantDigits = YES</code> 行,那么它将被格式化为 <code>¥678,071,967,196,719,797,153,475,347,467</code>,更接近,但仍会删除小数点和以下值。</p>

<p>但是,当我传入 <code>6780.0416000000012517376</code> 时,它的格式 <em>正确</em> 为 <code>¥6,780.04</code> 并带有有效数字行。它被格式化为 <code>¥6,780</code> 没有有效数字行。</p>

<p>我知道 NSNumberFormatter 可以接受任何 NSNumber 作为参数,但只能处理精确到 double 值的值,使 NSDecimalNumber 没有错误和不正确的结果。</p>

<p>如何在不损失精度的情况下使用货币代码格式化 NSDecimalNumbers?</p>

<p>谢谢</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>尝试设置最小小数位数:</p>

<pre><code>formatter.minimumFractionDigits = 2;
</code></pre>

<p>HTH</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 按国家/地区代码将 NSDecimalNumber 格式化为货币而不会丢失精度,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/36876181/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/36876181/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 按国家/地区代码将 NSDecimalNumber 格式化为货币而不会丢失精度