2016-12-10 6 views
0

私はOpencart 2.3で働いています&私は分数に変換された小数を必要とする状況に遭遇しました。私はcategory.tplページで作業しており、製品をページ上のリストに出力しています。属性は製品ごとに異なります。

例; 1つのページには、属性の色、長さA、および長さBがあります。 プロダクトAのデータは、現在、チャートでBlue、5.5、10.75として出力されています。 次のように出力します:Blue、5 1/2、10 3/4

とにかく変数$ attribute ['text']を挿入しますか?小数点の代わりに小数点を吐き出すフィルターに入れますか?また、ブルーを吐き出すにはブルーが必要であることに注意してください。

-Thanks、マイケル・P.

ここでは以下のコードです:realisticly使用されているいくつかの画分のみがあると仮定すると、

<?php if ($product['attribute_groups']) { ?> 
     <?php foreach ($product['attribute_groups'] as $attribute_group) { ?> 
      <?php foreach ($attribute_group['attribute'] as $attribute) { ?> 

    <div class="attGroup matchHeight"><?php echo $attribute['text']; ?> </div> 

       <?php } ?> 
      <?php } ?> 
     <?php } ?> 

答えて

0

、あなたが変換するために、このレジストリを使用し、その後、それらを登録prevouslyかもしれませんが、 10進数値が見つかりました。次に、あなたのHTMLの一部は次のようになり

function dec2frac($x) { 
    $dec_parts = [ 
     25 => '1/4', 
     50 => '1/2', 
     75 => '3/4', 
    ]; 

    $int_part = floor($x); 
    echo $dec_part = ($x - $int_part) * 100; 
    if (isset($dec_parts[$dec_part])) { 
     $x = $int_part . ' ' . $dec_parts[$dec_part]; 
    } 
    return $x; 
} 

<div class="attGroup matchHeight"><?php echo dec2frac($attribute['text']); ?> </div> 
0

このアルゴリズムの助けを借りて:Converting float decimal to fraction

はこれを試してみてください。

function float2rat($n, $tolerance = 1.e-6) { 
    $h1=1; $h2=0; 
    $k1=0; $k2=1; 
    $b = 1/$n; 
    do { 
     $b = 1/$b; 
     $a = floor($b); 
     $aux = $h1; $h1 = $a*$h1+$h2; $h2 = $aux; 
     $aux = $k1; $k1 = $a*$k1+$k2; $k2 = $aux; 
     $b = $b-$a; 
    } while (abs($n-$h1/$k1) > $n*$tolerance); 

    return "$h1/$k1"; 
} 


function printNiceAttr($attrString) { 
    $arr = explode(',', $attrString); 
    $color = trim($arr[0]); 
    $size1A = explode('.', $arr[1]); 
    $size1F = float2rat((float) ('0.' . $size1A[1])); 

    $size2A = explode('.', $arr[2]); 
    $size2F = float2rat((float) ('0.' . $size2A[1])); 
    return $color . ', ' . $size1A[0] . ' ' . $size1F . ', ' . $size2A[0] . ' ' . $size2F; 
} 

echo printNiceAttr('Blue, 5.5, 10.75'); //outputs Blue, 5 1/2, 10 3/4 

それはこのようなものかもしれません

関連する問題