繁体   English   中英

在Javascript中将十进制数转换为文本字符串分数?

[英]Convert decimal amount to text string fraction in Javascript?

我有一个以数字形式返回的值,可以是十进制数,例如“1.15”。

但是,我需要将范围内的所有数字格式化为给定的分数。 例如,所有大于0但小于.2的数字我想返回“1/8”。

我已经开始将这个作为一系列if / else语句开始,但我想知道是否有更智能和更整洁的方式。

if (amt > 0 && amt <= .2){
    q = '1/8';
} else if (amt > .2 && amt <= .3){
    q = '1/4';
}  else if (amt > .3 && amt <= .4){
    q = '1/3';
}  else if (amt > .4 && amt <= .5){
    q = '1/2';
} else if (amt > .5 && amt <= .7){
    q = '2/3';
} else if (amt > .7 && amt <= .8){
    q = '3/4';
} else if (amt > .8 && amt <= 1.0){
    q = '7/8';
} else if (amt > 1 && amt <= 1.1){
    q = '1';
} etc.....

将您的代码移动到一个函数中,您可以从正确的分支return并跳过所有else语句,这会非常显着地清理它们:

function toFraction(amt) {
  if (amt > 0 && amt <= .2) return '1/8';
  if (amt <= .3) return '1/4';
  if (amt <= .4) return '1/3';
  if (amt <= .5) return '1/2';
  // etc
}

Ratio.js有一个名为.toQuantityOf()的函数。

.toQuantityOf()在将分数的当前值转换为基于提供的单位的近似值之后返回一个新分数。 如果多个单元作为参数传递,则将返回与原始值最接近的匹配。

.toString()将分数作为字符串返回。

var fraction = Ratio.parse("1.15").toQuantityOf(2,3,4,8);
fraction.toString() == "9/8";

如果需要, .toLocaleString()将返回混合数字。

fraction.toLocaleString() == "1 1/8";

您可以对amt执行数学运算以将其转换为范围内的整数值,然后将其用作数组查找的索引以获取分数文本。

如果您的范围相等,那可能很简单,但由于您有一些1/10(0.3到0.4)和一些2/10(0.5到0.7),它会稍微复杂一些,而不仅仅是乘以10。


fractional = {
    fractions: [ "1/8", "1/8", "1/4", "1/3", "1/2", "2/3", "2/3", "3/4", "7/8", "1" ],
    toFraction: function(amt) {
        return this.fractions[(""+(amt*10)).split('.')[0]];
    }
};

alert(fractional.toFraction(0.37));
  1. 多个amt乘以10并得到整数部分
  2. 从您之前构建的数组 - 查找相应的字符串!

NB - 该数组是固定的 - 因此是静态的

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM