如何比较货币数字格式的值

Posted

技术标签:

【中文标题】如何比较货币数字格式的值【英文标题】:How to compare values of currency number formats 【发布时间】:2019-11-16 06:18:02 【问题描述】:

The code in the picture returning false in both cases of comparison, what values should be given to get the true value

【问题讨论】:

第一个println在控制台输出什么? java.text.DecimalFormat@7adaa R$ 466,56 【参考方案1】:

首先请添加代码而不是图像。很难帮助处理图像中的代码。

与 == 的字符串比较可能返回 true,也可能不返回 true。使用等于

所以你的代码给出以下输出

public static void main(String[] args) 
    Locale br = new Locale("pt", "BR");
    NumberFormat nf = NumberFormat.getCurrencyInstance(br);
    float d = 466.56f;
    System.out.println(nf+" : "+nf.format(d));
    System.out.println(nf.format(d) == "R$ 466,56");  // will return false.
    System.out.println(nf.format(d).equals("R$ 466,56")); // compare string with equals

输出:

java.text.DecimalFormat@7ad2a : R$ 466,56
false
true

【讨论】:

对我来说 nf.format(d) 打印的是 466,56 而不是 R$ 466,56 哦,好的。编辑细节。为我工作。请尝试使用我使用过的代码 谢谢。我复制了你的代码,但它仍然返回错误并给我十进制格式:DecimalFormat@7adaa 谢谢。它给了我真实的信息,但是如果我重新输入了该值,那么它给了我错误的信息。你知道它为什么会这样吗【参考方案2】:

问题是,空格有不同的 unicode。我键入时获得的空间的 Unicode 是 '\u0020' 但 NumberFormat.getCurrencyInstance.format(float) 方法返回相同的字符串,但该空间的 unicode 为 '\u00a0' 并且这个 unicode 字符被排除在 isWhitespace() 方法之外。这就是为什么它对我返回 false 的原因。

【讨论】:

以上是关于如何比较货币数字格式的值的主要内容,如果未能解决你的问题,请参考以下文章

如何仅使用货币代码将数字格式化为货币?

将数字数组格式化为具有最小宽度的货币

如何获取当前文化格式的数字货币

如何使用正则表达式将数字格式化为货币

如何将数字格式化为货币字符串

如何处理文本字段中的格式化数字(货币)?