DecimalFormat:用空格替换浮点数

时间:2013-02-02 01:05:29

标签: decimalformat

我们需要在浏览器表格中显示货币金额,因为这些是数字,所以它们应该是正确对齐的。 日本没有浮点货币的货币存在问题。 所以对他们来说,我们不能显示5。10日元

现在,要求显示如下: (注意十进制货币与非小数的对齐和混合)

  5.23
 12.00
  3.24
  5
  9
 11.00

在上面,5和9是日元,而其他是美元 所以要求是用JPY等货币替换浮点数。需要空间才能使货币正确对齐。 当然,对于其他货币,应该有2位小数。

有谁知道如何做到这一点?

提前多多感谢!!


基于以下回复:

1)这些值从Java服务器发送并送入JavaScript库SlickGrid 2)我们想要在服务器级别控制值,因为SlickGrid代码不适合这种工作。 3)货币被存储为浮动货币,因为客户希望以这种方式看待货币:(这是正确的,因为大多数人都对美元而不是美分感到困扰,但是,有些人也担心美分。

我真的希望只使用DecimalFormat的一些选项,因为那将是最好的解决方案。 否则,我将不得不求助于解析和字符串按摩的丑陋解决方案。

2 个答案:

答案 0 :(得分:2)

永远不应将货币存储为浮点数。它应该始终是您正在使用的最低面额的整数(Yen,Cents,Paise)。

如果您需要使用小于最低自然面额的金额,请将货币存储为表示指定分数的倍数的整数金额。例如,日元的十分之六。

关于格式化,讨论了简单选项here

答案 1 :(得分:0)

以下CSS基本上取自jsj答案中的链接(提取了最相关的部分)

仅HTML版本:

td { font-family: monospace; }
span.int {
  text-align: right;
  float: left;
  width: 3em;
}

span.fractional {
  text-align: left;
  float: right;
  width: 2em;
}
<table>
    <tr><td><span class="int">5</span><span class="fractional">.23</span></td></tr>
    <tr><td><span class="int">12</span><span class="fractional">.00</span></td></tr>
    <tr><td><span class="int">3</span><span class="fractional">.24</span></td></tr>
    <tr><td><span class="int">5</span><span class="fractional"></span></td></tr>
    <tr><td><span class="int">9</span><span class="fractional"></span></td></tr>
    <tr><td><span class="int">11</span><span class="fractional">.00</span></td></tr>
</table>

JavaScript版本:

function spanInt(content){ var span = document.createElement('span');span.className = 'int'; span.textContent = content; return span; }
function spanFractional(content){ var span = document.createElement('span'); span.className = 'fractional'; span.textContent = content; return span;}
function tableCell_int(value){
  var td = document.createElement('td');
  td.appendChild(spanInt(value));
  td.appendChild(spanFractional(''));
  return td;
}
function tableCell_float(value){
  var intPart = Math.floor(value);
  var fracPart = value - intPart;
  var td = document.createElement('td');
  td.appendChild(spanInt(intPart));
  td.appendChild(spanFractional('.' + Math.round(100*fracPart)));
  return td;
}
function tr(cell){
  var elt = document.createElement('tr');
  elt.appendChild(cell);
  return elt;
}
var theTable = document.getElementById('theTable');
function add_int(value){ theTable.appendChild(tr(tableCell_int(value))); }
function add_float(value){ theTable.appendChild(tr(tableCell_float(value))); }

add_float(5.23); add_float(12); add_float(3.24);
add_int(5); add_int(9); add_float(11);
td { font-family: monospace; }
span.int {
  text-align: right;
  float: left;
  width: 3em;
}

span.fractional {
  text-align: left;
  float: right;
  width: 2em;
}
<table id='theTable'></table>